DataTemplate Data Trigger работает только со второго раза - PullRequest
2 голосов
/ 27 февраля 2009

У меня есть следующий 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). Но во второй раз это так!

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

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

1 Ответ

2 голосов
/ 27 февраля 2009

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

...