2016-09-19 5 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(私の最大)の値にこれをやって:これは、現在どのようです。長さを減らし、コードをより効率的または動的にする方法はありますか?

更新日: @フリーマン?

<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

私はあなたのVM上で、それらの論理を持っているだけ – 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'色をバインドすることができrecommandうしかし、単一の細胞の代わりに? – PL200

+0

はい、DataGridのItemContainerStyleを使用することができます – FreeMan

関連する問題