[оригинал]
У меня есть ListBox
, у которого есть ItemsSource
(это делается в коде позади при создании окна) с привязкой к ObservableCollection
. ListBox
затем присваивается следующее значение DataTemplate
для элементов:
usercontrol.xaml
<ListBox x:Name="communicatorListPhoneControls"
ItemContainerStyle="{StaticResource templateForCalls}"/>
app.xaml
<Style x:Key="templateForCalls" TargetType="{x:Type ListBoxItem}">
<Setter Property="ContentTemplate" Value="{StaticResource templateRinging}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=hasBeenAnswered}" Value="True">
<Setter Property="ContentTemplate" Value="{StaticResource templateAnswered}"/>
</DataTrigger>
</Style.Triggers>
</Setter>
</Style>
Когда ObservableCollection
обновляется объектом, он появляется в ListBox
с правильным начальным DataTemplate
, однако, когда для свойства hasBeenAnswered
установлено значение true
(при отладке я вижу коллекцию правильно) DataTrigger
не переоценивает, а затем обновляет ListBox
для использования правильного DataTemplate
.
Я реализовал INotifyPropertyChanged
Событие в моем объекте, и если в шаблоне привязано значение, я могу увидеть обновление значения. Просто DataTrigger
не будет переоценивать и менять правильный шаблон.
Я знаю, что привязка DataTrigger
правильная, потому что, если я закрою окно и открою его снова, он будет правильно применять вторую таблицу данных, потому что hasBeenAnswered
установлен на true
.
[править 1]
Следуя комментариям Тимора, я попробовал следующее:
usercontrol.xaml
<ListBox x:Name="communicatorListPhoneControls"
ItemTemplate="{StaticResource communicatorCallTemplate}"/>`
app.xaml:
<DataTemplate x:Key="communicatorCallTemplate">
<Label x:Name="test">Not answered</Label>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=hasBeenAnswered}" Value="True">
<Setter TargetName="test" Property="Background" Value="Blue"/>
</DataTrigger>
</DataTemplate.Triggers>
</Label>
</DataTemplate>
То, что происходит сейчас, аналогично первому примеру, когда вызов поступает в метке «Не ответил» (по одному на вызов, который существует, так как это список - обычно, когда окно загружается, вызовов не будет), Затем на вызов поступает ответ, и для пророчества hasBeenAnswered
устанавливается значение true, но «Не отвеченный» остается тем же. Если я закрою окно и снова открою его (при активном вызове, для которого свойство hasBeenAnspted имеет значение true), фон будет синим. Поэтому мне кажется, что сборщик данных просто не запускается, пока окно не будет перезапущено.