![]() |
1
25
在我看来,打开一个新窗口是视图的责任,而不是视图模型的责任。就我个人而言,我将使用与显示对话框相同的方法(这已经在本论坛中讨论过): 让viewmodel向视图发送一条消息,请求它打开一个新窗口。 (或者)使用idialogservice或任何您想调用它并传递给viewmodel的构造函数的东西。此服务将负责打开窗口(或将此任务委派给视图)。 这样,您就可以保持关注点的清晰分离,并且您的vm仍然是可测试的(您可以单元测试打开新窗口的请求是否已发送,但是您不能测试窗口是否确实已打开)。 这有道理吗? 干杯, 劳伦特 |
![]() |
2
7
从viewmodel调用
从你的视角来看( 第二种观点 看法 )在构造函数中轻松编写:
并在视图的代码隐藏中编写此方法:
|
![]() |
3
1
我没有自己的答案,但这里有一些链接,我最近一直在看,可能会有帮助。我也会对其他人的建议感兴趣。 据我所知,关键是,你 不应该从视图模型中创建视图 如果可能的话,你需要一种以松散耦合的方式交流你所需要的东西的方式。 http://www.codeproject.com/KB/WPF/XAMLDialog.aspx http://www.codeproject.com/KB/architecture/MVVM_Dialogs.aspx |
![]() |
4
0
您可以这样做,就像您需要创建一些事件并在视图中注册这些事件并在视图模型中调用这些事件一样。然后打开弹出窗口。 就像这个例子
在视图内
在这里注册活动
|
![]() |
5
0
Prism事件聚合器是一种很好的方法,在这种方法中,我们可以创建独立的模块而无需依赖。首先ViewModel将发布事件,然后另一个视图或视图或ViewModel可以从事件聚合器订阅该事件。 在这种情况下,unity容器还可以使用依赖注入将一个viewmodel注入到另一个viewmodel中。 |
![]() |
Pablo · MVVM实施中的疑问 9 年前 |
![]() |
Speuline · MVVM模式视图的特定模型? 9 年前 |
![]() |
yams · 如何在MVVM Light中调用另一个视图模型构造函数 10 年前 |
|
Francois · 如何从类型注册到<T> 11 年前 |