【问题标题】:Bind view-model property setter to control method将视图模型属性设置器绑定到控制方法
【发布时间】:2021-04-11 17:21:03
【问题描述】:

我目前正在处理一个对 MVVM 不友好的自定义控件,它通过普通方法而不是依赖属性公开了很多“属性”,或者需要通过方法设置属性,因为需要传递额外的参数.

简单的伪例子:

class TextControl : CustomControl {
    void SetText(string text, int fontSize);
    string GetText(string defaultValue);   
}

现在我想绑定到控件的“文本”,例如如果需要,为参数传递一些默认值。至于“setter”,我可以创建一个附加属性并提供一个回调,然后调用SetText(),但是“getter”呢?有没有一种干净的方法来处理这个问题,或者是将视图传递给视图模型的唯一方法?

【问题讨论】:

  • 您到底想达到什么目的?绑定到属性并不是世界末日。如果应用程序有效,那么您只是为了好玩而重构。如果这是第三方控件,请说明。
  • @ΩmegaMan 是的,它确实是第 3 方控件。

标签: c# wpf xaml mvvm data-binding


【解决方案1】:

您可以创建附加属性来提供绑定,这些属性将在内部操纵“不友好”控件。

信息:https://docs.microsoft.com/en-us/dotnet/desktop/wpf/advanced/attached-properties-overview?view=netframeworkdesktop-4.8

一个潜在的优势是附加属性可以用于多个控件;因此,如果您碰巧有一个共享某些共同属性的第 3 方控件系列,您也许可以编写一组附加属性以供所有这些控件使用。

【讨论】:

  • 正如我自己的问题中提到的,我已经尝试过附加属性,但是当我试图从控件中获取值时,我并不完全确定附加属性的 getter 应该如何工作该属性是附加到的,而不是来自附加的属性本身。
【解决方案2】:

您可以做的是创建自己的自定义控件,该控件将简单地封装相关控件。这样您就可以公开 MVVM 的依赖属性,但在其背后的代码中会根据需要操纵和调整第三方控件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    相关资源
    最近更新 更多