2016-10-24 27 views
0

我試圖爲我的DataGrid中具有特定值的每個單元格設置特定顏色。我在網上看到了很多,但我沒有找到一個能夠接近我的情況。 基本上我有這個DataGrid結構:在DataGrid中綁定通用單元格屬性

<DataGrid ItemsSource="{Binding MatchService.Matches}" AutoGenerateColumns="False" 
         CanUserAddRows="false" IsReadOnly="True"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="{DynamicResource championship}" Binding="{Binding Competition}"/> 
     <DataGridTextColumn Header="1" Binding="{Binding HomeWin}"/> 
     <DataGridTextColumn Header="X" Binding="{Binding Draw}"/> 
    </DataGrid.Columns> 

,所以我需要使用純XAML的解決方案,尤其是通用的風格,處理所有的單元格值。例如,如果HomeWin單元格的值爲<50,則單元格背景爲red,如果單元格值爲>60,背景將爲綠色。

如何創建一個默認樣式並將其綁定爲每個DataGridTextColumn沒有寫轉換器或這樣的?

謝謝。

+0

您可以爲'DataGridTextCo lumn',但是如果你想在除「equals」之外的觸發器中進行屬性值比較,則必須編寫一個轉換器。並且不要寫一個NumberToBrush轉換器。編寫一個數字比較轉換器,並將畫筆放置在使用該觸發器的DataTrigger中。 –

+1

沒有純粹的XAML解決方案。你必須實現並使用綁定轉換器。這是我第四次將這個問題作爲重複來解決。請不要再一次提出同樣的問題。第二個StackOverflow用戶帳戶在這裏也不是很受歡迎。 – Clemens

+0

@Clemens,嚴格來說,有一個純xaml解決方案:dataTrigger在cellStyle中爲每個可能的值。然而它只適用於有限的(和更好的小)值集合(例如,枚舉,布爾) – ASh

回答

1

1.創建一個NumberToBrush轉換器是這樣的:

[ValueConversion(typeof(int), typeof(Brush))] 
public class NumberToBrushConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     int val = (int)value; 
     if (val < 50) 
      return Brushes.Red; 
     if (val > 60) 
      return Brushes.Green; 

     return Brushes.Transparent; 
    } 

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

2.添加到您的視圖資源:

<Window.Resources> 
    <wpfApplication1:NumberToBrushConverter x:Key="NumberToBrushConverter"/> 
</Window.Resources> 

3.使用DataGridTemplateColumn代替DataGridTextColumn並重新定義你的DataTemplate使用轉換器與您的綁定值:

<DataGrid.Columns> 
      <DataGridTemplateColumn Header="X"> 
       <DataGridTemplateColumn.CellTemplate> 
         <DataTemplate DataType="wpfApplication1:YourModel"> 
          <TextBox Text="{Binding X}" Background="{Binding Path=X, Converter={StaticResource NumberToBrushConverter}}" /> 
         </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn> 
     </DataGrid.Columns> 
+0

謝謝你的回答,只是爲了好奇:可以創建一個像swith這樣的情況條件:'switch(val){case if(val <50){return Brushes.Red;}}' – JDOE

+0

當然,只需替換如果你的條件與開關案例 – Rom

+0

你能告訴我怎麼樣?謝謝。 – JDOE

相關問題