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

WPF和MVVMLight——通过Messenger关闭特定的子窗口分享

时间:2023-04-11 12:11:04 C#

WPF和MVVMLight——通过Messenger关闭特定的子窗口在我的项目中,我可以打开多个子窗口,显示和返回信息,然后单击按钮关闭它们。我遇到的问题是单击“接受”或“取消”按钮会关闭所有打开的窗口。我需要找到一种方法来只关闭正确的窗口,但我不知道怎么做。我正在使用MVVMLight,我认为令牌可能是关键,但我还没有弄清楚如何让它们工作。如果有人能帮助我,我将不胜感激。在MainWindow中创建子窗口:Messenger.Default.Register(this,message=>{varuniqueKey=System.Guid.NewGuid().ToString();varadventurerWindowVM=SimpleIoc.Default.GetInstance(uniqueKey);adventurerWindowVM.Adv=message.Argument;varadventurerWindow=newAdventurerView(){DataContext=adventurerWindowVM,Owner=this};adventurerWindow.Closed+=(sender,args)=>SimpleIoc.Default.Unregister(uniqueKey);adventurerWindow.Show();});从AdventurerViewModel发送关闭窗口消息:privatevoidExecuteAcceptCommand(){Messenger.Default.Send(Adv.Name);Messenger.Default.Send(newCloseWindowMessage());在AdventurerView中接收关闭窗口消息:Messenger。Default.Register(this,x=>Close());令牌方法:您有一个为每个AdventurerView生成的uniqueKey。只需在将CloseWindowMessage作为令牌发送时使用它。首先在AdventurerViewModel中添加一个字符串类型的新属性,比如“WindowKey”publicstringWindowKey{get;放;接下来添加一个构造函数以获取AdventureView中的唯一键。在AdventurerView.xaml.cs:publicAdventurerView():this(string.Empty){}publicAdventurerView(stringuniqueKey){InitializeComponent();Messenger.Default.Register(this,uniqueKey,s=>Close());}接下去在MainWindow.xaml.cs打开Messenger.Default.Register(this,message=>{varuniqueKey=System.Guid.NewGuid().ToString();...adventurerWindow.Show();});至Messenger.Default.Register(this,message=>{varuniqueKey=System.Guid.NewGuid().ToString();varadventurerWindowVM=SimpleIoc.Default.GetInstance(uniqueKey);adventurerWindowVM.Adv=message.Argument;adventurerWindowVM.WindowKey=uniqueKey;varadventurerWindow=newAdventurerView(uniqueKey){DataContext=adventurerWindowVM,Owner=this};adventurerWindow.Closed+=(sender,args)=>SimpleIoc.Default.Unregister(uniqueKey);adventurerWindow.Show();});最后在AdventurerViewModel.xaml.cs:打开privatevoidExecuteAcceptCommand(){Messenger.Default.Send(Adv.Name);信使。默认。发送(新的CloseWindowMessage());}toprivatevoidExecuteAcceptCommand(){Messenger.Default.Send(Adv.Name);Messenger.Default.Send(newCloseWindowMessage(),WindowKey);但是这种方法还有其他选择您的“消息”已经是自定义强类型(CloseWindowMessage)。现在您可以将WindowKey添加为消息的一部分,并让每个窗口在收到新的CloseWindowMessage时检查消息中的CloseWindowMessage,并根据自己的密钥相应地关闭()它。以上就是C#学习教程:WPF与MVVMLight——通过Messenger关闭特定子窗口分享全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文来自网络收集,不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: