基于变量的WPF Datagrid DataTrigger

基于变量的WPF Datagrid DataTrigger,wpf,Wpf,我有一个带有SDate列的数据网格,该列显示日期。我想在Xaml中创建一个触发器,当日期为某个值时,该触发器会将行变为绿色。我有一个完美的工作: <DataTrigger Binding="{Binding SDate}" Value="30/12/2016"> <Setter Property="Background" Value="Green"/> </DataTrigger> 我现在想修改这个触发器,删除类型化的日期,并用一个引用替换

我有一个带有SDate列的数据网格,该列显示日期。我想在Xaml中创建一个触发器,当日期为某个值时,该触发器会将行变为绿色。我有一个完美的工作:

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


我现在想修改这个触发器,删除类型化的日期,并用一个引用替换它,一个存储日期的变量。该变量已经是我的datacontent的一部分。可能吗?我进入WPF的第三天,可能在某处失去了剧情

您需要为相同的样式编写样式选择器


看一看。

您需要为相同的样式编写样式选择器


看一看。

我会使用一个
多绑定和一个多值转换器:

转换器:

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
;您没有说):


我会使用
多绑定和多值转换器来实现这一点:

转换器:

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
;您没有说):


您必须为sameAs@Mohit points yout编写一个样式选择器,实际上无法将任何内容绑定到
DataTrigger.Value
。您可能应该做的是使用多值绑定和多值转换器,如果绑定到多值绑定的两个值为true,则该转换器将返回true。您最好将颜色绑定到日期,并添加一个IValueConverter,该转换器接受该日期并返回画笔/颜色。您必须为sameAs@Mohit points yout编写样式选择器,实际上,您不能将任何内容绑定到
DataTrigger.Value
。您可能应该使用多值转换器的多值绑定,如果绑定到多值绑定的两个值为true,则该转换器将返回true。您最好将颜色绑定到日期,并添加一个IValueConverter,该转换器将获取该日期,并返回画笔/颜色,但这无法在此处提示。我的错:您绝对是错的对,不可能在
DataTrigger.Value
上设置绑定。不幸的是,在您编辑答案之前,它不允许我撤消DV。OTOH带有比较转换器的多重绑定仍然比多重样式好。这不能像这里所说的那样做到。我的缺点:你完全正确,不可能在
DataTrigger.Value
上设置绑定。不幸的是,在您编辑答案之前,它不允许我撤消DV。OTOH一个带有比较转换器的多绑定仍然比多个样式要好。我成功地将代码转换为VB,现在我坚持使用本地:在窗口资源中,这是我在WPF的第三天,我完全超出了我的能力。我破解了它,代码工作得很好,我的引用和名称空间没有对齐。非常感谢你的帮助@用户1500403太棒了!我设法将代码转换成VB,现在我坚持使用本地:在窗口资源中,这是我在WPF的第三天,我完全超出了我的能力。我破解了它,代码工作得很好,我的引用和名称空间没有对齐。非常感谢你的帮助@用户1500403太棒了!
<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>