WPF ListBox数据触发器未激发
我有一个播放列表,我想强调现在播放的项目 我试过这个WPF ListBox数据触发器未激发,wpf,listbox,datatrigger,Wpf,Listbox,Datatrigger,我有一个播放列表,我想强调现在播放的项目 我试过这个 <!-- Row 5: Playlist --> <ListBox x:Name="Tracks" MinHeight="400" Grid.Row="5" Margin="20"> <ListBox.ItemTemplate> <DataTemplate> <DockPanel Height="44" Wid
<!-- Row 5: Playlist -->
<ListBox x:Name="Tracks" MinHeight="400" Grid.Row="5" Margin="20">
<ListBox.ItemTemplate>
<DataTemplate>
<DockPanel Height="44" Width="436" Dock="Left">
<StackPanel Orientation="Vertical" Width="374" Name="Wrapper">
<Label Content="{Binding Path=title}" Name="Test" Foreground="CornflowerBlue" FontSize="14" Padding="0" />
<Label Content="{Binding Path=artist}" Foreground="DarkGray" FontSize="14" Padding="0" />
</StackPanel>
<Label Content="{Binding Path=DurationFormatted}" Foreground="DarkGray" Width="62" Padding="0" DockPanel.Dock="Right" HorizontalContentAlignment="Right" />
</DockPanel>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=NowPlaying}" Value="True">
<Setter TargetName="Wrapper" Property="Background" Value="LightBlue"/>
<Setter TargetName="Test" Property="FontSize" Value="24"/>
<Setter Property="ListBoxItem.Foreground" Value="Red" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
还有这个
<ListBox.ItemTemplate>
same stuff without Triggers section
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=NowPlaying}" Value="True">
<Setter Property="ListBoxItem.Background" Value="Red" />
</DataTrigger>
</Style.Triggers>
</Style>
</ListBox.ItemContainerStyle>
NowPlaying只是audio model的一个bool属性,我在调试器中检查了当前对象是否确实得到了NowPlaying==true。但这两个触发器都不会改变项目外观。我做错了什么?
另外,对我来说,我更喜欢命令式风格。从codebehind做这件事够容易吗
另外,我为强调项设置极值只是为了测试:记住你需要通过实现接口来提高NowPlaying属性吗?否则,绑定引擎无法看到属性已更改,因此无法对视图进行更新
还有一个小小的补充:我绝对支持第一种方法,尽量避免datatrigger,事实上,所有与业务数据相关的数据绑定都尽可能采用样式。样式应该只包含视图设计,数据模板用于显示真实数据。如果将其分开,则重用样式会容易得多。记住,您需要通过实现接口来提高NowPlaying属性?否则,绑定引擎无法看到属性已更改,因此无法对视图进行更新
还有一个小小的补充:我绝对支持第一种方法,尽量避免datatrigger,事实上,所有与业务数据相关的数据绑定都尽可能采用样式。样式应该只包含视图设计,数据模板用于显示真实数据。如果将此项分开,则重复使用样式会容易得多。谢谢,我不知道INotifyPropertyChanged。谢谢,我不知道INotifyPropertyChanged。