2014-09-01 87 views
3

我有一个ListView在网格模式下显示数据列表。网格工作,但我无法绑定背景属性。如果“FileExists == false”,那么我想以红色显示该行。为什么这不起作用?WPF设置ListViewItem.Background绑定

该列表在Windows.Loaded中加载。我还将[ImplementPropertyChanged]属性添加到数据类(使用NuGet PropertyChanged.Fody),但这没有帮助。

<ListView x:Name="VideosView" TabIndex="2" SelectedValuePath="VideoId" Margin="10,50,10,37" ButtonBase.Click="VideosView_ColumnHeaderClick"> 
    <ListView.Resources> 
     <Style TargetType="{x:Type ListViewItem}"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding FileExists}" Value="False"> 
        <Setter Property="Background" Value="Red" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </ListView.Resources> 
    <ListView.View> 
     <GridView> 
      <GridViewColumn DisplayMemberBinding="{Binding Artist, Mode=OneWay}" Header="Artist" Width="100"/> 
      <GridViewColumn DisplayMemberBinding="{Binding Title, Mode=OneWay}" Header="Title" Width="300"/> 
      <GridViewColumn DisplayMemberBinding="{Binding Length, Converter={StaticResource TimeSpanConverter}, Mode=OneWay}" Header="Length" Width="40"/> 
     </GridView> 
    </ListView.View> 
    <ListView.ItemContainerStyle> 
     <Style TargetType="ListViewItem"> 
      <EventSetter Event="Control.MouseDoubleClick" Handler="VideosView_ItemDoubleClick"/> 
     </Style> 
    </ListView.ItemContainerStyle> 
</ListView> 

数据类

[ImplementPropertyChanged] 
public class VideoListItem { 
    public VideoListItem() { 
    } 

    public int VideoId { get; set; } 
    public string Artist { get; set; } 
    public string Title { get; set; } 
    public string FileName { get; set; } 
    public int? Length { get; set; } 
    public bool FileExists { get; set; } 
    public bool IsInDatabase { get; set; } 
} 
+3

为什么你有两个ListViewItem的风格,在ListView的资源一个默认的样式,另外一组为ItemContainerStyle?只需将DataTrigger移动到ItemContainerStyle,然后放下另一个Style。 – Clemens 2014-09-01 20:40:06

+0

你有2种风格的ItemContainerStyle,1在你的资源中,你不是我们的,它看起来就像是你想要着色的那种, ,另一个集合就像itemsContainerStyle,它看起来好像什么都不做,那么究竟是什么ru试图做什么? – 2014-09-01 20:42:50

回答

2

您的默认ListViewItem的风格ListView的资源是不是有效的,因为你明确地设置另一 ListViewItem的风格深受ItemContainerStyle财产。

刚落,默认的样式和移动DataTrigger到ItemContainerStyle:

<ListView ...> 
    ... 
    <ListView.ItemContainerStyle> 
     <Style TargetType="ListViewItem"> 
      <EventSetter Event="Control.MouseDoubleClick" Handler="VideosView_ItemDoubleClick"/> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding FileExists}" Value="False"> 
        <Setter Property="Background" Value="Red" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </ListView.ItemContainerStyle> 
</ListView> 
+0

mmm ...我也尝试过,但也许有另一个细节,当我尝试时出现了错误。现在我再试一次,它正在工作。非常感谢! – 2014-09-01 22:00:04