2016-12-29 1 views
0

날짜를 표시하는 SDate 열이있는 DataGrid가 있습니다. Xaml에서 날짜가 특정 값일 때 행을 녹색으로 바꾸는 triger를 만들고 싶습니다.WPF Datagrid 변수를 기반으로하는 DataTrigger

<DataTrigger Binding="{Binding SDate}" Value="30/12/2016"> 
     <Setter Property="Background" Value="Green"/> 
</DataTrigger> 

지금은 참조 대신 날짜를 저장하는 변수를 입력 한 날짜를 제거하고 대체하는이 트리거를 변경하고 싶습니다 :이 완벽하게 작동합니다. 변수는 이미 내 datacontent의 일부입니다. 그게 가능하니? 임 3 일째 WPF로 그리고 어딘가 음모를 잃었을 수도 있습니다.

+0

당신은 @Mohit이 행해져 Yout 포인트와 같은 – Mohit

+0

에 대한 스타일 선택기를 작성해야, 당신은 실제로 DataTrigger.Value''아무것도 바인딩 할 수 없습니다. 멀티 바인드에 바인딩 된 두 값이 참이면 true를 반환하는 다중 값 변환기와 함께 멀티 바인드를 사용해야합니다. –

+0

색상을 날짜에 바인딩하는 것이 더 좋을 수도 있고 그 날짜를 가져 와서 브러시/색상을 반환하는 IValueConverter를 추가하는 것이 더 편리 할 수도 있습니다. – 0x4f3759df

답변

1

나는 MultiBinding 및 다중 값 변환기를 사용하여이 작업을 수행 할 것 :

변환기 :

public class DateEqualsConverter : IMultiValueConverter 
{ 
    public object Convert(object[] values, 
     Type targetType, 
     object parameter, 
     CultureInfo culture) 
    { 
     return System.Convert.ToDateTime(values[0]) 
      .Equals(System.Convert.ToDateTime(values[1])); 
    } 

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

창 자원 (아마도이 ​​대신 UserControl.Resources입니다, 당신은 말하지 않았다) :

<Window.Resources> 
    <local:DateEqualsConverter x:Key="DateEquals" /> 
</Window.Resources> 

여기 Style에있는 DataTrigger입니다. SDate을 비교하는 viewmodel 속성의 이름을 알지 못하므로 그냥 GreenDate이라고 부릅니다.

OTOH "변수가 이미 내 datacontent의 일부입니다."는 속성이 이미 viewmodel에 정의되어 있고 viewmodel이 DataContext임을 의미합니다. 그것은 하나일지도 모른다. 알려줘.

<DataTrigger 
    Value="True" 
    > 
    <DataTrigger.Binding> 
     <MultiBinding Converter="{StaticResource DateEquals}"> 
      <MultiBinding.Bindings> 
       <Binding Path="SDate" /> 
       <Binding Path="GreenDate" /> 
      </MultiBinding.Bindings> 
     </MultiBinding> 
    </DataTrigger.Binding> 

    <Setter Property="Background" Value="Green" /> 
</DataTrigger> 
+0

내가 VB에서 코드를 최상위로 변환했습니다. 이제는 로컬로 붙어 있습니다. 창 리소스에서 WPF Im totaly에서 내 3 번째 날입니다. – user1500403

+1

코드가 완벽하게 작동합니다. 참조 할 곳과 이름 공간을 알 수 없습니다. 일렬로 늘어서있다. 도와 줘서 고마워 !! – user1500403

+0

@ user1500403 굉장! –

1

동일한 스타일 선택기를 작성해야합니다.

this을 살펴보십시오.

+1

여기서는 화제로 처리 할 수 ​​없습니다. http://stackoverflow.com/questions/2240421/using-binding - 값 - 속성 - of - datatrigger - 조건 – Mohit

+1

왜 아래로 투표 ?? – Mohit

+0

내 잘못 : 네가 맞아, DataTrigger.Value에 Binding을 넣을 수 없다. 불행히도 당신이 대답을 편집 할 때까지는 DV를 취소 할 수 없습니다. OTOH 비교 변환기를 사용하는 MultiBinding은 여러 스타일보다 여전히 좋습니다. –