2016-09-19 2 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> 

당신은 몇 가지 매우 긴 XAML 코드에서 주 결과 매일 매일 3 (내 최대)의 값으로 0의 값에서이 일을, 상상할 수있는 것처럼 : 이것은 현재 방법이다. 길이를 줄이고 내 코드를보다 효율적 또는 동적으로 만들 수있는 방법이 있습니까?

업데이트 : @ 프리먼?

<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' 색상을 결합 할 운영자 추천 것 하지만, 단일 세포 대신에? – PL200

+0

예, DataGrid의 ItemContainerStyle을 사용하면됩니다. – FreeMan

관련 문제