在WPF MVVM中使用Mediator

时间:2012-01-12 21:23:41

标签: c# wpf mvvm mediator

我有一个项目实现类似于此问题中的Mediator模式: Sql, Wpf, Xaml, C#, Binding data, Dynamic resource, accessing to non-static data, Obtaining a Reference to an Object

当在父视图中调用Register()函数,然后在子视图中调用SendMessage()函数时,这似乎工作正常。可以很容易地获得在孩子中获得的数据,然后父母可以通过Mediator处理它。

但是我需要做相反的事情。获取父项中获取的数据并将其传递给要处理的子项。调解员可以用于此任务吗?

我已经尝试了各种方法在子节点中使用SendMessage()在子节点中调用Register()函数,但由于Register()初始化集合,因此记录似乎丢失了。

我错过了什么吗?还有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题...我知道它不是一个好的解决方案,但我解决了这个问题......

在您的ChildView中

    public ChildViewModel()
    {
        Messenger.UnRegister(this); //I use reflection and Attributes to register/Unregister you can do it normally
        Messenger.Register(this);
        if (ChildData== null)
        {
            Messenger.NotifyColleagues<object>(
                MessengerMessages.GET_CHILD_DATA,ChildData);
        }            
    }
    [MessengerMessageSink(MessengerMessages.SEND_CHID_DATA,
        ParameterType = typeof (CHILD_DATA))]
    protected void Set_Child_DATA(ChildData childData)
    {
        if (childData!= null)
        {
            //Do Something              
        }
    }

在您的ParentView

    public ParentViewModel()
    {
        Messenger.UnRegister(this); //I use reflection and Attributes to register/Unregister you can do it normally
        Messenger.Register(this);            
    }
    [MessengerMessageSink(MessengerMessages.GET_CHILD_DATA,
        ParameterType = typeof (CHILD_DATA))]
    protected void Send_Child_DATA(Object obj)
    {
                        Messenger.NotifyColleagues<object>(
                MessengerMessages.SEND_CHILD_DATA,ChildData);
    }

这里我们调用parentViewModel在ChildViewModel dosent找到它需要的数据时发送所需的数据....