1

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

2 回答 2

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

CloseWindowMessage在哪里

public class CloseWindowMessage : MessageBase {}
于 2013-06-08T23:39:49.990 回答
0

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

您需要确保只有正确的子窗口才能收到此消息,否则所有子窗口都会收到相同的消息,但只有正确的子窗口会关闭。在这种情况下,消息需要包含一个具有正确值的属性,以让子窗口确定它是否是要关闭的窗口。

当您注册或发送消息时,MVVMLight 具有称为“令牌”的功能。

看一下这个:

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

于 2013-06-09T02:53:18.947 回答