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?
    }

WPF和MVVM Light -通过信使关闭带有按钮的子窗口

public class WindowClass
{
    public WindowClass()
    {
       var messenger = ServiceLocator.Current.GetInstance<IMessenger>();
       messenger.Register<CloseWindowMessage>(this, _ => Close());
    }
}

其中CloseWindowMessage

public class CloseWindowMessage : MessageBase {}

如果多个子窗口注册相同类型的消息,

您需要确保此消息仅被正确的子窗口接收,或者所有子窗口将接收相同的消息,但只有正确的子窗口将关闭。在这种情况下,消息需要包含一个具有正确值的属性,以让子窗口确定它是否是要关闭的。

MVVMLight在您注册或发送消息时具有称为"token"的功能。

看看这个:

如何向多个视图中的一个视图发送消息