2016-09-19 47 views
0

我目前正试图(在C#)基于其数值到颜色的DataGrid的细胞。我的DataGrid的列被设置为星期几(星期一至星期五),我目前可以做到这一点,但它非常冗长。这是它目前是如何:在WPF/XAML中使用触发器是否更有效?

<DataGrid Name="mapDisplay" ItemsSource="{Binding}" Margin="27,29,27,10" ColumnWidth="73"> 
      <DataGrid.CellStyle> 
       <Style TargetType="DataGridCell"> 
        <Style.Triggers> 

         <MultiDataTrigger> 
          <MultiDataTrigger.Conditions> 

           <!-- Check if cell has value of 0 in the 'Monday' column. --> 

           <Condition Binding="{Binding Path=Monday}" Value="0"/> 
           <Condition Binding="{Binding Column.DisplayIndex,RelativeSource={RelativeSource Self}}" Value="1"/> 
          </MultiDataTrigger.Conditions> 
          <Setter Property="Background" Value="White" /> 


         </MultiDataTrigger> 
         <MultiDataTrigger> 

           <MultiDataTrigger.Conditions> 
           <!-- Check if cell has value of 1 in the 'Monday' column. --> 

            <Condition Binding="{Binding Path=Monday}" Value="1"/> 
            <Condition Binding="{Binding Column.DisplayIndex,RelativeSource={RelativeSource Self}}" Value="1"/> 
           </MultiDataTrigger.Conditions> 
           <Setter Property="Background" Value="White" /> 
          </MultiDataTrigger> 
           ... 
        </Style.Triggers> 
       </Style> 
      </DataGrid.CellStyle> 
</DataGrid> 

正如你可以想像,从0值的一周导致一些极其冗长的XAML代码中的每一天这样做是为了3(我最大)的值。有没有办法减少长度,并使我的代码更有效率或动态?

UPDATE:这是你的意思,@Freeman?

<dg:DataGrid.ItemContainerStyle> 
    <Style 
     TargetType="{x:Type dg:DataGridColumn}" 
     BasedOn="{StaticResource {x:Type dg:DataGridColumn}}"> 
     <Setter 
      Property="Background" 
      Value="{Binding ItemColour}" /> 
    </Style> 
</dg:DataGrid.ItemContainerStyle> 

虽然在我的情况下,我会使用转换器将值转换为颜色?

+0

我会建议您对您的虚拟机的逻辑,只是 – Gopichandar

回答

0

你可以写一个转换器类

public class DayToBackgroundConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, 
     object parameter, CultureInfo culture) 
    { 
     // logic here 
     if(value == "Monday") return Brushes.Blue; //etc... 
    } 

    public object ConvertBack(object value, Type targetType, 
     object parameter, CultureInfo culture) 
    { 
     // logic here 
    } 
} 

<DataGridTextColumn Binding="{Binding CurrentDay}"> 
    <DataGridTextColumn.ElementStyle> 
     <Style TargetType="{x:Type TextBlock}"> 
      <Setter Property="Background" Value="{Binding Name, Converter={StaticResource DayToBackgroundConverter }}"/> 
     </Style> 
    </DataGridTextColumn.ElementStyle> 
</DataGridTextColumn> 
+0

这是不是颜色的整排结合的'itemstemplate'的'Background'颜色视图虽然,而不是一个单元格? – PL200

+0

是的,它可以通过使用DataGrid的ItemContainerStyle – FreeMan

相关问题