2010-03-22 137 views
1

我有一個ListView綁定到ObservableCollection mPersonList。 Class Person獲得了一個枚舉性。我想要做的是將ListViewItem的背景設置爲綠色,如果該人是男性,並且如果該人是女性則設置爲紅色。Wpf ListViewItem背景綁定到枚舉

感謝您的答案!

我試過這樣,但最新錯了嗎?

<Style x:Key="CustomListViewItemStyle" TargetType="{x:Type ListViewItem}"> 
     <Setter Property="Background" Value="{Binding Path=Status, Converter={StaticResource sexEnumToColor}}" /> 
</Style> 

和:

public class SexEnumToColor : IValueConverter 
{ 
    #region IValueConverter Member 

    object IValueConverter.Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     Sex tempSex = (Sex)value; 
     Brush retval; 

     switch (tempSex) 
     { 
      case Sex.Male: 
       retval = Brushes.Blue; 
       break; 

      case Sex.Female: 
       retval = Brushes.Red; 
       break; 

      default: 
       retval = Brushes.Black; 
       break; 
     } 

     return retval; 
    } 

    object IValueConverter.ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 

    #endregion 
} 

回答

0

你可以將性屬性與轉換器綁定。事情是這樣的:

<ListView> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <TextBox Text="{Binding name}" Background="{Binding sex, Converter={StaticResource converterSexToColor}}" /> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

和轉換器:

public class ConverterSexToColor : IValueConverter 
{ 
    public object Convert(object value, Type targeTtype, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return (Sex)value == Sex.Male ? Brushes.Green : Brushes.Red; 
    } 
    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 
+0

THX爲答案,但這改變了文本框的背景顏色。我怎麼能做到這一點改變一個listviewitem的backgroundcolor?在這種情況下, – Christian 2010-03-22 12:55:13

+0

文本框只是數據模板中的一個元素。所以改變bg文本框與改變listviewitem的bg相同。如果你有另一個數據模板,你可以用你的模板包裝(例如)並將prorepty綁定到它的背景。 – 2010-03-22 13:15:13

0

在Person類的模板使用DataTrigger。

如果您發佈了部分類定義和當前模板,我們可以完成它。

1

添加明確的結合,爲ListViewItem數據模板,如果你不使用數據模板將無法正常工作。在這種情況下,你需要讓樣式起作用,並讓它起作用,你需要知道它爲什麼不起作用。

你的風格出了什麼問題是你已經爲它指定了一個鍵。當創建任何元素時,WPF會在資源字典中搜索一個Style對象,其鍵是該元素的類型。如果它找到一個,那就是它適用的風格。如果沒有,則不會應用樣式。

如果您在樣式聲明中指定TargetType,但省略x:Key,那麼在將其添加到資源字典時分配的鍵就是該類型。但是因爲你已經明確地爲你的風格指定了一個鍵,所以這是被賦值的關鍵。所以WPF從來沒有找到它,並沒有得到應用。

既然你不希望在全球範圍內這種風格添加到您的窗口中的每個ListViewItem,我們該做的可能是把它添加到ListView的資源字典:

<ListView ItemsSource="{DynamicResource Data}"> 
    <ListView.Resources> 
     <local:SexToColorConverter x:Key="SexConverter" /> 
     <Style TargetType="{x:Type ListViewItem}"> 
      <Setter Property="Background" 
        Value="{Binding Path=Sex, Converter={StaticResource SexConverter}}" /> 
     </Style> 
    </ListView.Resources> 
    <ListView.View> 
     <GridView> 
      <GridViewColumn Header="Name" 
          DisplayMemberBinding="{Binding Name}" /> 
      <GridViewColumn Header="Sex" 
          DisplayMemberBinding="{Binding Sex}" /> 
     </GridView> 
    </ListView.View> 
</ListView>