如何使用 DOTVVM 中的控件数据调用视图模型的方法?

How can I call the viewmodel's method with data of the control in DOTVVM?

我有 .dotcontrol,我需要使用来自控件的数据在视图模型中调用函数。

该方法不能在控件中,因为它需要仅在视图模型中可用的外观。所以我为viemodel声明了接口并实现了这个功能。

但是如果我像下面这样称呼它:

<dot:Button Click="{controlCommand: ViewModelFunction(ControlProperty)}" Text="CHECK CODE"/> 

它会导致以下错误:

The Name 'ViewModelFunction' does not exist in the current context'.

所以我试着用命令调用它:

<dot:Button Click="{command: ViewModelFunction(ControlProperty)}" Text="CHECK CODE"/>

这看起来不错,但如果我在一个页面上有两个控件,它就不起作用了。因为该方法是用第一次使用控件的数据调用的。无法识别控件的其他用法的数据。

如何使用控件的数据调用视图模型的方法?

controlCommand 不起作用,因为 ViewModelFunction 是在 ViewModel 上声明的,而 controlCommand 的默认绑定上下文是控件。您可以使用 _this 参数来访问视图模型的方法和属性。所以它应该看起来像:

<dot:Button Click="{controlCommand: _this.ViewModelFunction(ControlProperty)}" Text="CHECK CODE"/>

顺便说一句,我们正计划消除命令绑定的这种限制,因此第二种方法有望在未来发挥作用。