我有一个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接口,属性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:解决第二个问题:我发现,每当更新IsExpanded属性上的编程更新时,都需要调用INotifyPropertyChanged接口的OnPropertyChangedEvent。至于最初的问题,情况似乎并非如此,我仍在试图找出问题出在哪里。:)
发布于 2009-09-05 11:22:54
我被引导相信你不能取代收藏,只改变它的内容。
发布于 2014-12-29 20:58:59
属性中的一个布尔条件,我也要绑定它
我不完全确定您在这里的意思,但我猜想这是您的“命令”上的IsSelected属性,并且您忘记为该属性引发PropertyChanged。
https://stackoverflow.com/questions/1382782
复制相似问题