【问题标题】:WPF Datagrid DataTrigger based on a variableWPF Datagrid DataTrigger 基于一个变量
【发布时间】:2016-12-29 14:43:33
【问题描述】:

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

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

我现在想更改此触发器以删除键入的日期并将其替换为引用存储日期的变量。该变量已经是我的数据内容的一部分。那可能吗?我进入 WPF 的第 3 天,可能在某个地方丢失了情节。

【问题讨论】:

  • 你必须为它写一个 StyleSelector
  • 正如@Mohit 指出的那样,您实际上无法将任何内容绑定到DataTrigger.Value。您可能应该做的是使用带有多值转换器的多重绑定,如果绑定到多重绑定的两个值都为真,则该转换器返回真。
  • 您最好将颜色绑定到日期并添加一个 IValueConverter 来获取该日期并返回一个画笔/颜色

标签: wpf


【解决方案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 我猜“变量已经是我的数据内容的一部分”意味着该属性已经在您的视图模型中定义,并且您的视图模型是您的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>

【讨论】:

  • 我设法将代码转换为 VB,现在我坚持使用本地:在窗口资源中,这是我在 WPF 的第三天,我完全超出了我的深度
  • 我破解了,代码完美运行,我的引用和命名空间没有对齐。非常感谢您的帮助!!!!
  • @user1500403 太棒了!
【解决方案2】:

您需要为此编写样式选择器。

看看this

【讨论】:

  • 这不能像这里讨论的那样完成stackoverflow.com/questions/2240421/…
  • 我的错:你说得对,不可能在DataTrigger.Value 上设置绑定。不幸的是,在您编辑答案之前,它不会让我撤消 DV。 OTOH 带有比较转换器的 MultiBinding 仍然比多种样式更好。
猜你喜欢
  • 2015-10-18
  • 2011-03-19
  • 1970-01-01
  • 2021-04-18
  • 2016-10-28
  • 1970-01-01
  • 2014-01-28
  • 2023-01-20
  • 2020-02-01
相关资源
最近更新 更多