2016-12-29 42 views
0

我有一個顯示日期的SDate列的數據網格。我想在Xaml中創建一個triger,當日期是某個值時,該行將變成綠色。我有這方面的工作完美:基於變量的WPF Datagrid DataTrigger

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

我現在想改變這種觸發刪除輸入日期和替換它與參考存儲的日期,而不是一個變量。該變量已經是我的數據內容的一部分。那可能嗎?進入WPF的第3天,可能已經在某處丟失了陰謀。

+0

你必須寫一個StyleSelector爲同一 – Mohit

+0

作爲@Mohit指出YOUT,你不能真正綁定什麼'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> 

而這裏的DataTriggerStyle。我不知道你正在比較SDate的viewmodel屬性的名稱,所以我只是把它叫做GreenDate

OTOH我猜「變量已經是我的datacontent的一部分」是指該財產是在您的視圖模型已經定義,和你的視圖模型是你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我總是在我的深度 – user1500403

+1

我破解它,代碼完美工作,我的引用和名稱空間aren排隊。非常感謝您的幫助! – user1500403

+0

@ user1500403太棒了! –

1

您需要爲相同的樣式選擇樣式選擇器。

看看this

+1

這裏 disscued這不能做http://stackoverflow.com/questions/2240421/using-binding -for-the-value-property-of-datatrigger-condition – Mohit

+1

爲什麼要投票? – Mohit

+0

我的不好:你是對的,不可能在'DataTrigger.Value'上放置一個Binding。不幸的是,除非你編輯答案,否則它不會讓我撤銷DV。 OTOH帶有比較轉換器的MultiBinding仍然會比多種樣式更好。 –