2013-08-05 20 views
51

kullanarak bir özellik değerine dayalı DataGrid'in satır Arka Plan, nasıl ayarlanır, ben belirli bir satırda nesnenin bir değerine dayalı her satırın Background rengini ayarlamak istiyorum. Ben z bir ObservableCollection var ve z her State adlı bir özelliğe sahiptir. Ben benim DataGrid böyle bir şey ile başladı: x benim ViewModel sınıfta bir özellik olmadığı içinveri bağlamaları benim XAML kodunda

<DataGrid.RowStyle> 
    <Style TargetType="DataGridRow"> 
     <Setter Property="Background" 
       Value="{Binding z.StateId, Converter={StaticResource StateIdToColorConverter}}"/> 
    </Style> 
</DataGrid.RowStyle> 

Bu yanlış bir yaklaşımdır. Benim ViewModel sınıfta

Bu DataGrid ait ItemsSource bir ObservableCollection<z> ve tip z bir SelectedItem var.

Rengi SelectedItem'a bağlayabilirim, ancak bu yalnızca DataGrid'daki bir satırı değiştirecektir.

Ben, bir mülk değişikliği bu satırlar backgroundcolor dayalı nasıl

?

cevap

114

Kullanım DataTrigger

<DataGrid ItemsSource="{Binding YourItemsSource}"> 
     <DataGrid.RowStyle> 
      <Style TargetType="DataGridRow"> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding State}" Value="State1"> 
         <Setter Property="Background" Value="Red"></Setter> 
        </DataTrigger> 
        <DataTrigger Binding="{Binding State}" Value="State2"> 
         <Setter Property="Background" Value="Green"></Setter> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </DataGrid.RowStyle> 
    </DataGrid> 
+2

Ben sadece almak: BindingExpression yolu hatası: 'BooleanToBrushConverter şu sınıftır

<DataGrid.RowStyle> <Style TargetType="DataGridRow"> <Setter Property="Background" > <Setter.Value> <Binding Path="State" Converter="{StaticResource BooleanToBrushConverter}"> <Binding.ConverterParameter> <x:Array Type="SolidColorBrush"> <SolidColorBrush Color="{StaticResource RedColor}"/> <SolidColorBrush Color="{StaticResource TransparentColor}"/> </x:Array> </Binding.ConverterParameter> </Binding> </Setter.Value> </Setter> </Style> </DataGrid.RowStyle> 

'State' özelliği 'object' '' z '(HashCode = 7162954)' üzerinde bulunamadı. BindingExpression: Yol = Devlet; DataItem = 'z' (HashCode = 7162954); hedef eleman 'DataGridRow' (Name = ''); target özelliği 'NoTarget' ('Object') ''Varlığımın elinde bulundurduğunda Mülkiyet Durumunu bulamadığı ve veritabanım Devleti bir sütun olarak gösterir? –

+2

Umarım bunu z.tate olarak yapmazsınız. – Nitesh

+3

Sadece wpf'den çıktıktan sonra tekrar karşılaştım, tekrar tekrar dileğim! – Ric

11

aynı çok DataTrigger olmadan yapılabilir:

public class BooleanToBrushConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (value == null) 
      return Brushes.Transparent; 

     Brush[] brushes = parameter as Brush[]; 
     if (brushes == null) 
      return Brushes.Transparent; 

     bool isTrue; 
     bool.TryParse(value.ToString(), out isTrue); 

     if (isTrue) 
     { 
      var brush = (SolidColorBrush)brushes[0]; 
      return brush ?? Brushes.Transparent; 
     } 
     else 
     { 
      var brush = (SolidColorBrush)brushes[1]; 
      return brush ?? Brushes.Transparent; 
     } 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
}