【问题标题】:Getting a reference to the ViewModel from an IValueConverter从 IValueConverter 获取对 ViewModel 的引用
【发布时间】:2009-04-20 18:26:00
【问题描述】:

是否存在从 IValueConverter 引用 ViewModel 的干净和/或可接受的标准方式,或者这是否破坏了 MVVM 模式?基本上,我想根据 ViewModel 的其他属性转换 UI 中的绑定数据。我想这与你如何从 IValueConverter 引用窗口/页面是同一个问题,因为对控件的引用没有传递给 Convert/ConvertBack 方法。

【问题讨论】:

    标签: .net wpf data-binding mvvm ivalueconverter


    【解决方案1】:

    我建议向 ViewModel 添加一个新属性,以连接或组合 ViewModel 中的其他属性。这消除了对IValueConverter 的需求。

    在使用 MVVM 时查看this 关于IValueConverters 的讨论。

    【讨论】:

    • +1 转换器在练习 MVVM 时可以在很大程度上被废除。结果,您将获得更清晰、更易于理解的代码。
    【解决方案2】:

    每当我遇到需要在转换器中使用 ViewModel 的多个属性的罕见情况时,我只需将整个视图模型作为输入传递,ala;

    <Textbox Text="{Binding, Converter={StaticResource WholeObjectConverter}"/>
    

    就调用转换的窗口/页面/视图而言,这不是一个好主意,因为这肯定会破坏 MVVM 模式。这个想法是您的视图和数据是独立的实体,并且设计上不应该相互了解。

    如果你真的想破解它,你可能会变得聪明,并将你想要的引用(ViewModel 或 View)作为绑定的 ConverterParameter 部分传递。

    【讨论】: