当前位置: 首页 > 编程语言 > C#

从不同的ViewModels执行相同的Prism命令共享

时间:2023-04-11 03:01:05 C#

从不同的ViewModels执行相同的Prism命令是否可以使用Prism以某种方式在WPF应用程序中从不同的ViewModels执行一个命令?让我解释一下我的意思。我有MainMenuViewModel类:publicclassMainMenuViewModel{privateICommand_aboutCommand;publicICommandAboutCommand{get{if(_aboutCommand==null){_aboutCommand=newDelegateCommand(()=>{MessageBox.Show("关于菜单项被点击!");});}返回_aboutCommand;这个模型还有一个视图:应用程序中有另一个模块,它应该以相同的行为执行命令(也许更好-相同的命令):publicclassMunisatorViewModel{privateICommand_aboutCommandInAnotherModule;publicICommandAboutCommandInAnotherModule{get{if(_aboutCommandInAnotherModule==null){_aboutCommandInAnotherModule=newDelegateCommand(()=>{MessageBox.Show("关于菜单项被点击!");});}不返回_about}CommandIn};这个模块有View:About是否避免重复代码?PS我知道我可以为两个ViewModel创建基类并在那里描述这个命令,但问题是,一些ViewModel已经有不同的基类。使用EventAggregator引发此类事件。这允许您在UI的不同区域之间进行松散耦合的通信。发布/订阅概念,通过实现CompositeEvent对象传递数据效果很好。或者,您可以使命令静态并从不同的区域访问它,但这似乎不太好。Prism文档详细说明了您的选择。希望有所帮助。也许您可以将AboutCommand重构为一个单独的类/对象,然后可以将其注入两个视图模型(构造函数、设置器...)。这样每个视图模型将只提供对命令对象的引用,并且会有一些代码重复以从主视图模型“外包”AboutCommand逻辑的价格。另一种更静态的方法是使用包含CompositeCommand的命令代理,例如AboutCommand。然后,您可以在任何地方注册about命令的实现(或多个实现)。希望这可以帮助。以上就是C#学习教程:从不同的ViewModel执行同一个Prism命令,分享所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: