我正在寻找 MVVM 解决方案。视图中使用了一个控件(我们称之为 V)。该控件有一个方法 Foo()。该方法不能被事件调用,因为它的操作没有连接到控件的任何事件。我需要从 ViewModel 调用这个方法,但是 ViewModel 当然不知道视图。您对如何扩展 Control 以启用符合 MVVM 的 V.Foo() 调用有任何想法吗?
问问题
2152 次
4 回答
2
我刚刚检查了我未接受的问题并找到了这个。
我记得我通过向控件添加ICommand依赖属性解决了这个问题,该控件使用OneWayToSource绑定,没有更新。Execute()调用将调用控件上的方法。
于 2014-10-14T12:05:58.227 回答
0
在这种情况下,我通常会使用 Messenger(例如 MVVMLight)/Mediator/EventAggregator(例如 Prism)模式来通知 View 它应该执行该方法。使用这种模式,您基本上可以从 VM 向某个收件人(在您的情况下为视图)发送消息,而不知道谁将处理它。因此视图模型不需要知道视图。
此外,此模式可用于创建可以处理我的许多收件人的通用广播消息,而发件人不知道其中任何一个。
例子:
和
PS:
这种方法有很多有效的案例。但是,必须说,如果有其他解决方案,应该避免从 ViewModel 调用 View。
对于那些批评从视图模型访问视图的人:请记住,MVVM 是通过提供替代方案来授权用户,而不是强加规则。
于 2012-11-18T11:34:41.740 回答
0
在视图模型中创建一个布尔值,它将向视图发出信号以执行操作。如果您有权访问该控件,请创建一个依赖属性,该属性可以绑定到上述布尔值并在更改时调用该方法。如果您没有能力编写依赖属性,请创建一个可以完成工作的行为。
于 2012-11-18T10:25:12.120 回答
0
于 2012-11-18T09:51:16.160 回答