从弹出(“子”)窗口重新加载父窗口

时间:2010-07-09 09:14:01

标签: wpf mvvm mvvm-light

怎么可能?我们的想法是将信息输入到弹出/子窗口内的表单中,然后,当您保存/关闭它时,它会自动更新弹出窗口最初打开的“父”窗口。

请建议,

由于

3 个答案:

答案 0 :(得分:1)

这是在MVVM Light中使用Messenger类的完美原因。创建NotificationMessage以将更新命令发送到主视图模型。

    public MainWindowViewModel()
    {
        if ((IsInDesignMode))
        {
        }
        // Code runs in Blend --> create design time data.
        else
        {
            // Code runs "for real"
            Messenger.Default.Register<NotificationMessage<string>>(this, new System.Action<NotificationMessage<string>>(NotificationMessageHandler));

        }
    }

    private void NotificationMessageHandler(NotificationMessage<string> sender)
    {
        if ((sender.Notification == "refreshData"))
        {
            // Do something here
        }
    }

答案 1 :(得分:0)

希望你有一个用于子窗口的ViewModel。它将在ChildWindow中更改所有数据。因此,当您关闭窗口时,将相应的模型保存到数据库并再次从数据库加载MainWindowView模型集合。

答案 2 :(得分:0)

在我的应用程序中,我有一个Singleton对象来保存此事件:

Public Event DataChanged(ByVal EntityChanged As String, 
                               ByVal IDChanged As Integer)

保存或删除记录时,会引发事件(在这种情况下,通过弹出窗口)

因此,您只需在父窗口(或任何其他窗口)中执行此操作即可订阅事件,并在引发事件时刷新数据。您可以检查EntityChanged参数(产品,订单,客户等)和ID以查看是否必须刷新。