WPF& MVVM Light - 通过Messenger关闭带有按钮的子窗口

时间:2013-06-08 22:49:59

标签: c# wpf mvvm mvvm-light

在我的项目中,我有一个子窗口,可以一次打开多个实例。它们接收对象的实例,显示有关它的信息,并返回有关它的信息。现在它正在工作,但我必须关闭窗口,顶角有'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?
    }

2 个答案:

答案 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具有称为“令牌”的工具。

检查出来:

How to send message to one view of many