【问题标题】:How to pass parameter from code to ValueConverter如何将参数从代码传递到 ValueConverter
【发布时间】:2012-04-18 14:27:27
【问题描述】:

我有一个 IValueConverter 类,用于更改数据网格单元格的背景颜色,以防单元格本身的值大于 0(不重要)。

现在我想创建几个包含这个数据网格的窗口实例。根据在 Window 实例中定义的某些值,IValueConverter 应为数据网格的单元格的背景着色或不着色。所以 IValueConverter 应该根据 Window 类的实例做不同的工作。

现在的问题是:我无法在 XAML 中传递 ConverterParameter,因为该参数将是所有窗口实例的修复参数。 我考虑过以编程方式将相关信息传递给 IValueConverter 类(这是必需的),但是如何访问 IValueConverter 类的实例? 我当前的解决方案:我将一些静态变量放入 IValueConverter 类中,这样我就可以从 Window 类的实例中访问它们。但是这个解决方案很糟糕,因为变量是静态的,因此 ValueConverter 在每个窗口实例中的行为方式都相同。

有谁知道如何从 Window 实例以编程方式访问 IValueConverter 实例? 谢谢!

【问题讨论】:

    标签: c# .net wpf ivalueconverter


    【解决方案1】:

    由于您无法将数据绑定到 ConverterParameter,因此您可以选择以下两种方式之一(另请参阅 this SO question):

    1. 向视图模型添加依赖属性并进行多值转换器
    2. 将整个视图模型传递到您的绑定表达式中

    【讨论】:

    • @Phillip Schmid 不幸的是,我不知道如何管理您的第二个提案(我不知道语法)。如何将整个视图模型传递给我的绑定表达式?这是否意味着我可以在 ValueConverter 中访问视图模型(即 DataContext)?这将是一个好方法...
    • Value={Binding} 没有任何路径意味着你传递了整个DataContext。此外,如果您添加转换器,您会将 DataContext 传递给转换器
    猜你喜欢
    • 2018-12-23
    • 2021-05-13
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-29
    相关资源
    最近更新 更多