Триггер DataTemplate Data работает только со второго раза

У меня есть следующий 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}" />

That XAML is inside a Window element. I'm binding the Window to a ViewModel object with two properties, State and 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). Но во второй раз получается!

Может кто-нибудь указать, где ошибка?

Боюсь, я не могу опубликовать код здесь, но могу поделиться им, если у вас есть ответ и вы дадите мне электронное письмо.


person Román    schedule 27.02.2009    source источник
comment
Решил это с помощью стилей и триггеров, но все же хотел бы знать, в чем разница   -  person Román    schedule 27.02.2009


Ответы (1)


Ваш DataTemplate применяется к типу TemplateViewModel вместо ViewModel. Следовательно, это не будет применяться ни к чему, пока не будет установлено свойство MainContent.

person Kent Boogaart    schedule 27.02.2009