/ / RelativeSource BindingExpression erro - WPF, mvvm, RelativeSource

Erro de BindingExpression do RelativeSource - wpf, mvvm, parentescoource

Eu estou usando um WPF RelativeSource Binding em um DataTemplate para uma das minhas aulas de ViewModel, assim:

<DataTemplate x:Type="{x:Type ViewModelB}">
<Grid Visibility="{Binding DataContext.MyBoolProperty,
RelativeSource={RelativeSource AncestorType=ContentControl},
Converter={StaticResource BooleanToVisibilityConverter}}">
</Grid>
</DataTemplate>

A ViewModel raiz, ViewModelA, Tem uma instância dessa ViewModel como uma propriedade pública, e também tem um DataTemplate para ele, como este:

  <DataTemplate x:Type="{x:Type ViewModelA}">
<ContentPresenter Content="{Binding ViewModelBProperty}" />
</DataTemplate>

Como você vê, eu quero alguma coisa na vista por ViewModelB sendo acionado Visible ou Hidden com base em uma propriedade que está no ViewModelA.

Esta abordagem funciona bem.

Contudo, ViewModelA em si também é apresentado em ContentPresenter. Quando altero o conteúdo deste ContentPresenter (por exemplo, para ViewModelC), Eu sou presenteado com algumas exceções de ligação no meu log de depuração, tais como:

System.Windows.Data Error: 40 : BindingExpression path error: "MyBoolProperty" property not found on "object" ""ViewModelC" (HashCode=56562781)". BindingExpression:Path=DataContext.MyBoolProperty; DataItem="ViewModelC" (Name=""); target element is "Grid" (Name=""); target property is "Visibility" (type "Visibility")

Eu estou supondo aqui, que o Binding ao DataContext é atualizado antes do ponto de vista real é descartado. O que pode ser feito para corrigir esse comportamento?

Respostas:

0 para resposta № 1

Acabei de corrigir este código, a reescrita daalltogether lógica de ligação. A ligação já não é dependend em uma propriedade de ViewModelA. Ainda estaria interessado em saber como se pode resolver tal problema a.