Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ViewModel如何与其自己的视图通信_C#_Wpf_Mvvm_Mvvm Light - Fatal编程技术网

C# ViewModel如何与其自己的视图通信

C# ViewModel如何与其自己的视图通信,c#,wpf,mvvm,mvvm-light,C#,Wpf,Mvvm,Mvvm Light,我正在开发一个WPF MVVM Light应用程序,我想显示一些消息框/对话框,或者还有一些其他场景,我想让我的视图模型与其视图通信,或者在其各自的视图上引发一些事件 如何实现这一点?prism框架有一个交互请求的概念来解决这个问题。可以找到一个很好的例子。prism框架有一个交互请求的概念来解决这个问题。可以找到一个很好的例子,或者参见MVVM Light的Messenger类。在默认情况下,当您使用MVVM灯时,它甚至应该具有sample。它类似于Messenger.Default.Send

我正在开发一个WPF MVVM Light应用程序,我想显示一些消息框/对话框,或者还有一些其他场景,我想让我的视图模型与其视图通信,或者在其各自的视图上引发一些事件


如何实现这一点?

prism框架有一个交互请求的概念来解决这个问题。可以找到一个很好的例子。

prism框架有一个交互请求的概念来解决这个问题。可以找到一个很好的例子,或者参见MVVM Light的Messenger类。在默认情况下,当您使用MVVM灯时,它甚至应该具有sample。它类似于Messenger.Default.Sendnew YourMessageClass,您可以在视图端注册侦听器。

请参阅MVVM Light的Messenger类。在默认情况下,当您使用MVVM灯时,它甚至应该具有sample。它类似于Messenger.Default.Sendnew YourMessageClass,您可以在视图端注册侦听器。

显示弹出窗口的责任不应该是ViewModel的责任,而应该是为您提供服务

如果弹出窗口是一个类似模式的窗口,如文件打开对话框、文件保存对话框、消息框确定/取消或是/否等,那么我相信服务将是正确的选择。原因是可以为单元测试伪造/模拟服务

此外,您还可以根据需要使用不同的服务实现:例如,在debug r中,当角色类型为admin或developer时,您的详细信息比在release或普通用户中的要多


现在,关于ViewModel如何与视图通信,我不确定您的意思。只需在ViewModel上添加一个属性并将视图绑定到该属性。

显示弹出窗口的责任不应该是ViewModel的责任,而应该是为您提供服务

如果弹出窗口是一个类似模式的窗口,如文件打开对话框、文件保存对话框、消息框确定/取消或是/否等,那么我相信服务将是正确的选择。原因是可以为单元测试伪造/模拟服务

此外,您还可以根据需要使用不同的服务实现:例如,在debug r中,当角色类型为admin或developer时,您的详细信息比在release或普通用户中的要多


现在,关于ViewModel如何与视图通信,我不确定您的意思。只需在ViewModel上添加一个属性,并将视图绑定到该属性。

谢谢,但我必须坚持使用MVVM Light来满足客户需求。好的,触发器操作类是.NET framework的一部分。您只需要实现一个与交互请求类等价的类。这是一个有趣的模式。谢谢,但我一定会坚持MVVM Light来满足客户需求。嗯,触发器操作类是.NET框架的一部分。您只需要实现一个与交互请求类等价的类。这是一个有趣的模式。谢谢你的回答,是的,它的工作。但这并不一致。我有一个选择屏幕,其中包含绑定到视图模型中命令的按钮,单击该按钮,命令激发并使用Messenger.Default.Send方法和“选择屏幕”接收该消息,我从该消息打开一个CRUD屏幕。现在,当CRUD屏幕尝试发送消息时,它也是通过“选择屏幕”而不是“CRUD屏幕”接收的。它现在工作正常,我只需在消息中设置令牌属性。感谢您的回复,是的,它工作正常。但这并不一致。我有一个选择屏幕,其中包含绑定到视图模型中命令的按钮,单击该按钮,命令激发并使用Messenger.Default.Send方法和“选择屏幕”接收该消息,我从该消息打开一个CRUD屏幕。现在,当CRUD屏幕尝试发送消息时,它也由“选择屏幕”而不是“CRUD屏幕”接收。它现在工作正常,我只需在消息中设置令牌属性。