WPF和MVVM Light -通过信使关闭带有按钮的子窗口
本文关键字:按钮 窗口 MVVM Light -通 信使 WPF | 更新日期: 2023-09-27 18:17:28
在我的项目中,我有一个子窗口,它的多个实例可以一次打开。它们接受对象的实例,显示有关该对象的信息,并返回有关该对象的信息。现在它是工作的,但我必须关闭窗口与"X"在顶部的角落。我想能够关闭与"接受"answers"取消"按钮的窗口。如果我点击接受,我想让MVVM光的信使发回适当的数据(这已经是功能),并关闭窗口。如果我点击"取消",更改应该被丢弃,窗口关闭。不幸的是,我不知道一个好的(和mvvm友好的)方法来关闭窗口使用按钮。我已经研究过使用命令,但无济于事,我不确定如何做到这一点。任何帮助都会很感激。我真的不知道在这种情况下该写什么代码…
<Button x:Name="btnAccept"
Grid.Row="2"
Grid.Column="1"
Content="Accept"
Command="{Binding AcceptCommand}"/>
<Button x:Name="btnCancel"
Grid.Row="2"
Grid.Column="2"
Content="Cancel" />
private void ExecuteAcceptCommand()
{
Messenger.Default.Send(Adv.Name);
//Close the window here somehow?
}
public class WindowClass
{
public WindowClass()
{
var messenger = ServiceLocator.Current.GetInstance<IMessenger>();
messenger.Register<CloseWindowMessage>(this, _ => Close());
}
}
其中CloseWindowMessage
为
public class CloseWindowMessage : MessageBase {}
如果多个子窗口注册相同类型的消息,
您需要确保此消息仅被正确的子窗口接收,或者所有子窗口将接收相同的消息,但只有正确的子窗口将关闭。在这种情况下,消息需要包含一个具有正确值的属性,以让子窗口确定它是否是要关闭的。
MVVMLight在您注册或发送消息时具有称为"token"的功能。
看看这个:
如何向多个视图中的一个视图发送消息