Использование медиатора в WPF MVVM - PullRequest
0 голосов
/ 13 января 2012

У меня есть проект, реализующий шаблон Mediator, подобный тому, который найден в этом вопросе: Sql, Wpf, Xaml, C #, Связывание данных, Динамический ресурс, доступ к нестатическим данным, Получение ссылки на объект

Это работает нормально, когда функция Register () вызывается в родительском представлении, а затем функция SendMessage () в дочернем представлении.Можно легко получить данные, полученные от ребенка, и затем родитель может обработать их через посредника.

Однако мне нужно поступить наоборот.Возьмите данные, полученные от родителя, и передайте их ребенку для обработки.Можно ли использовать Медиатор для этой задачи?

Я пробовал различные способы помещения вызова функции Register () в дочернем элементе с SendMessage () в родительском объекте, но поскольку Register () инициализирует коллекцию, записи, похоже, теряются.

Я что-то упустил?Есть ли лучший способ?

1 Ответ

0 голосов
/ 13 января 2012

У меня была такая же проблема ... я знаю, что это не очень хорошее решение, но я решил это так ...

В вашем 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 не находит необходимые данные ....

...