在我的项目中,我有一个子窗口,可以一次打开多个实例。它们接收对象的实例,显示有关它的信息,并返回有关它的信息。现在它正在工作,但我必须关闭窗口,顶角有'X'。我希望能够通过“接受”和“取消”按钮关闭窗口。如果我点击接受,我想让MVVM Light的信使发送回适当的数据(已经正常运行)并关闭窗口。如果单击“取消”,则应丢弃更改并关闭窗口。不幸的是,我不知道使用按钮关闭窗口的良好(和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?
}
答案 0 :(得分:2)
public class WindowClass
{
public WindowClass()
{
var messenger = ServiceLocator.Current.GetInstance<IMessenger>();
messenger.Register<CloseWindowMessage>(this, _ => Close());
}
}
CloseWindowMessage
public class CloseWindowMessage : MessageBase {}
答案 1 :(得分:0)
如果多个子窗口注册了相同类型的消息,
您需要确保此消息仅由正确的子窗口接收,否则所有子窗口都将收到相同的消息,但只有正确的消息将关闭。 在这种情况下,消息需要包含一个具有正确值的属性,以允许子窗口确定它是否是要关闭的属性。
当您注册或发送消息时,MVVMLight具有称为“令牌”的工具。
检查出来: