【问题标题】:Using a Mediator in WPF MVVM在 WPF MVVM 中使用中介
【发布时间】:2012-01-12 21:23:41
【问题描述】:

我有一个项目实现了类似于在这个问题中发现的调解器模式: 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() 初始化集合,记录似乎丢失了。

我错过了什么吗?有没有更好的办法?

【问题讨论】:

  • 它本质上是链接中的内容,除了 SelectList.xaml 代码隐藏和 Temp.xaml 代码隐藏被切换。

标签: c# wpf mvvm mediator


【解决方案1】:

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

在您的 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 找不到它需要的数据时发送所需的数据....

【讨论】:

  • 这个电话是怎么回事? [MessengerMessageSink(MessengerMessages.GET_CHILD_DATA, ParameterType = typeof (CHILD_DATA))]
  • @DJ。我使用反射来注册消息....在赋予函数的属性中的上述行,以便其注册函数以调用消息MessengerMessages.GET_CHILD_DATA
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多