0

この質問にあるものと同様のメディエーター パターンを実装するプロジェクトがあります: Sql、Wpf、Xaml、C#、データのバインド、動的リソース、非静的データへのアクセス、オブジェクトへの参照の取得

Register() 関数が親ビューで呼び出され、次に子ビューで SendMessage() 関数が呼び出されると、これは正常に機能するようです。子で取得されたデータは簡単に取得でき、親はメディエーターを介してそれを処理できます。

しかし、私は反対のことをする必要があります。親で取得したデータを子に渡して処理します。このタスクにメディエーターを使用できますか?

親に SendMessage() を使用して子に Register() 関数の呼び出しを配置するさまざまな方法を試しましたが、Register() がコレクションを初期化するため、レコードが失われているようです。

何か不足していますか?より良い方法はありますか?

4

1 に答える 1

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);
    }

ここでは、ChildViewModel が必要なデータを見つけられないときに、parentViewModel を呼び出して必要なデータを送信しています。

于 2012-01-13T19:46:21.810 に答える