我有一个DataTemplate,它在StackPanel中显示按钮。每当用户单击按钮时,该按钮应该发光。所以我在模板中编写了必要的DataTrigger,并在我绑定的属性中编写了布尔条件。以下是详细信息:
<DataTemplate x:Key="ActionItemsTemplate" DataType="ActionItemViewModel">
<ItemsControl IsTabStop="False" ItemsSource="{Binding}" Margin="6,2">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button x:Name="ActionButton" Command="{Binding Path=Command }" Content="{Binding Path=DisplayName}" Style="{DynamicResource HeaderButton}"/>
<!-- Set special values for Selected Item -->
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding IsSelected}" Value="True">
<Setter TargetName="ActionButton" Property="Style" Value="{DynamicResource MainWindowSelectedButton}"/>
<!--Command="{Binding Path=Command}" Content="{Binding Path=DisplayName}"-->
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</DataTemplate>
我已经实现了INotifyPropertyChanged接口,而Property ActionItems返回了一个ObservableCollection。
问题:当我更改ObservableCollection并调用INotifyPropertyChanged事件时,它不会直接反映在DataTemplate中,而只会更改属性。但是,如果我用自己重新分配整个对象,它就可以完美地运行。
e.g
void Test1()
{
_commands[0].IsSelected = !_commands[0].IsSelected;
_commands[0] = _commands[0]; // Does not work If this line is commented out
ActionItems = _commands;
}
问题是什么?
编辑:我发现在这种情况下问题可能出在DataBinding上。
我现在遇到了类似的问题,我将Expander控件的IsExpanded属性绑定到TabPanel内的bool属性。当我切换bool属性时,值会在后面更改,但不会在显示中反映出来。但是假设我改变标签然后回来,我看到发生了变化。这是否与此问题有关here?
我又想知道问题是什么(缩小了一点:) :)
编辑2 :第二个解决方案问题:我发现每当程序更新时,都需要调用INotifyPropertyChanged接口的OnPropertyChangedEvent IsExpanded属性已更新。至于原始问题,似乎并非如此,我仍然在试图弄清楚出了什么问题。 :)
答案 0 :(得分:0)
我被引导相信你无法取代该系列,只会改变它的内容。
答案 1 :(得分:0)
我绑定的属性中的布尔条件
我不完全确定你在这里的意思,但我猜测这是你的“命令”中的IsSelected属性,你忘了为该属性引发PropertyChanged。