将视图模型 属性 setter 绑定到控制方法

Bind view-model property setter to control method

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

简单伪示例:

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

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

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

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

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

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