2014-09-01 92 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