0

我有一个包含 4 个属性(Aaa、Bbb、Value、Focus)和按钮的 ViewModel,它使用静态命令绑定进行简单的仅客户端分配:

<dot:Button Click="{staticCommand: Focus=="Aaa" ? (Aaa=Value) : (Bbb=Value)}" />>

此代码工作正常,但不适用于比 Aaa、Bbb 更多的属性。

尤其是它使这个按钮依赖于属性 Aaa、Bbb,这使得重用按钮作为 UserControl 变得复杂。

可以写一些像这样的间接作业吗?

<dot:Button Click="{staticCommand: ViewModel[Focus]=Value}" />>
4

3 回答 3

1

您可以在 Viewmodel 中调用具有属性 AllowStaticCommand 的方法并在那里解决您的分配问题。

View 标记中的代码会更清晰。

https://www.dotvvm.com/docs/tutorials/basics-static-command-binding/latest

于 2019-09-10T19:48:21.860 回答
0

很抱歉,无法按名称写入任何属性,您可能必须坚持使用条件运算符。

顺便说一句,当你像这样格式化级联时,当有很多选项时它看起来并不可怕:

<dot:Button Click="{staticCommand: Focus=="Aaa" ? Aaa = Value :
                                   Focus=="Bbb" ? Bbb = Value :
                                   Focus=="Ccc" ? Ccc = Value :
                                                  Default = Value}" />

然而,这并不能解决可重用性问题。也许您可以将这些属性放入一个数组并通过索引访问它们?不幸的是,我不知道任何其他解决方案。

于 2019-09-02T15:37:16.773 回答
0

我找到了这个解决方法。我可以直接编写适当的客户端 onclick 事件,而不是静态绑定:

<dot:Button onclick="dotvvm.viewModels.root.viewModel[dotvvm.viewModels.root.viewModel.Focus()](dotvvm.viewModels.root.viewModel.Value())"  />
于 2019-09-02T21:02:08.810 回答