将视图模型 属性 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 可用的依赖属性,但在它背后的代码中根据需要操纵和调整第三方控件。
您可以创建附加属性来提供绑定,这些属性将在内部操纵“不友好”控件。
一个潜在的优势是可以在多个控件上使用附加属性;因此,如果您碰巧有一组共享某些共同属性的第 3 方控件,则您可以编写一组附加属性以用于所有这些控件。
我目前正在处理一个对 MVVM 相当不友好的自定义控件,它通过普通方法而不是依赖属性公开了很多它的“属性”,或者需要通过方法设置属性,因为额外的参数需要通过。
简单伪示例:
class TextControl : CustomControl {
void SetText(string text, int fontSize);
string GetText(string defaultValue);
}
现在我想绑定到控件的“文本”,例如如果需要,为参数传递一些默认值。至于“setter”,我可以做一个附加的 属性 并提供一个回调,然后调用 SetText()
,但是“getter”呢?有没有一种干净的方法来处理这个问题,或者是将视图传递给视图模型的唯一方法?
您可以做的是创建您自己的自定义控件,它将简单地封装有问题的控件。这样你就可以公开 MVVM 可用的依赖属性,但在它背后的代码中根据需要操纵和调整第三方控件。
您可以创建附加属性来提供绑定,这些属性将在内部操纵“不友好”控件。
一个潜在的优势是可以在多个控件上使用附加属性;因此,如果您碰巧有一组共享某些共同属性的第 3 方控件,则您可以编写一组附加属性以用于所有这些控件。