在我的项目中,我可以打开多个子窗口,显示并返回它们的信息,然后单击按钮关闭它们。我遇到的问题是单击“接受”或“取消”按钮会关闭所有打开的窗口。我需要找到一种只关闭正确窗口的方法,但我无法弄清楚如何。我正在使用 MVVM Light,我认为令牌可能是关键,但我还没有弄清楚如何让它们工作。如果有人可以帮助我,我将不胜感激。
在 MainWindow 中创建子窗口:
Messenger.Default.Register<OpenWindowMessage>(this, message =>
{
var uniqueKey = System.Guid.NewGuid().ToString();
var adventurerWindowVM = SimpleIoc.Default.GetInstance<AdventurerViewModel>(uniqueKey);
adventurerWindowVM.Adv = message.Argument;
var adventurerWindow = new AdventurerView()
{
DataContext = adventurerWindowVM,
Owner = this
};
adventurerWindow.Closed += (sender, args) => SimpleIoc.Default.Unregister(uniqueKey);
adventurerWindow.Show();
});
从 AdventurerViewModel 发送关闭窗口消息:
private void ExecuteAcceptCommand()
{
Messenger.Default.Send(Adv.Name);
Messenger.Default.Send<CloseWindowMessage>(new CloseWindowMessage());
}
在 AdventurerView 中接收关闭窗口消息:
Messenger.Default.Register<CloseWindowMessage>(this, x => Close());