У меня есть следующий XAML:
<Grid x:Name="root">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.Resources>
<DataTemplate DataType="{x:Type ViewModels:TemplateViewModel}">
<ContentControl Content="{Binding}" Grid.Row="0" x:Name="ct">
<ContentControl.ContentTemplate>
<DataTemplate>
<TextBlock Text="Loaded" />
</DataTemplate>
</ContentControl.ContentTemplate>
</ContentControl>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding DataContext.State,
RelativeSource={RelativeSource AncestorType={x:Type Window}}}" Value="2">
<Setter Property="ContentTemplate" TargetName="ct">
<Setter.Value>
<DataTemplate>
<TextBlock Text="Loading, please wait" Foreground="Red"/>
</DataTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</Grid.Resources>
<ContentControl Content="{Binding MainContent}" />
Этот XAML находится внутри элемента Window. Я связываю Окно с объектом ViewModel с двумя свойствами, State и MainContent:
public class ViewModel : INotifyPropertyChanged {
public int State {...} // this can be only 1 or 2, for simplicity
public TemplateViewModel MainContent { ... }
}
Я вызываю событие PropertyChanged соответствующим образом из установщиков свойств.
Теперь с помощью кнопки я загружаю файл с диска, анализирую его и создаю объект для назначения свойству MainContent. Перед синтаксическим анализом я установил для свойства State значение 2 (загрузка), а после присвоения я сбросил для свойства значение 1 (загрузка).
При первом анализе файла триггер в шаблоне данных не работает (обратите внимание, что триггер привязан к свойству State контекста данных родительского окна, то есть объекта ViewModel). Но во второй раз это так!
Может кто-нибудь указать, где ошибка?
Боюсь, я не могу опубликовать код здесь, но мог бы поделиться им, если у вас есть ответ и дайте мне электронное письмо ..