0

私はファイルビューアを備えたSilverlightプロジェクトに取り組んでいます。このファイルビューアには、ソースプロパティまたはストリームを受け入れるその他のプロパティがありません。LoadDocument(Stream file)メソッドがあります。ファイルは非同期で読み込まれるため、バッファが使用可能であることをビューに「通知」してから、ビューにLoadDocumentメソッドを呼び出させる必要があります。

MVVMLightでは、「メッセンジャー」機能を使用してこれを行うことができました。EventAggregatorが表示されますが、表示されるものはすべて、通信が逆方向に進んでいます。これは本当に簡単なことだと思いますが、私にはわかりません。

ビューコンストラクターにメソッドをViewModelのプロパティにバインドする方法はありますか?これはxamlで実行されるのと同じ機能のようですが、コードビハインドで実行したいだけです。

ありがとう

dbl

4

1 に答える 1

0

投稿ではわかりませんが、イベントをコントロールからビューのメソッドにバインドしたいようです

その場合:

<SomeControl cal:Message.Attach="[Event SomeEvent] = [Action SomeMethod($eventArgs)]" />

逆の場合は、イベントアグリゲーターを使用できます(ビューはイベントをサブスクライブできます...なぜ、まだ分離されています...)

VM:

SomeEventAggregator.Publish(new SomeMessageInstanceThatTheViewWillSubscribeTo());

意見:

class SomeView : UserControl, IHandle<SomeMessageInstanceThatTheViewWillSubscribeTo>

// dont forget to...
SomeEventAggregator.Subscribe(this);

または、ビューにインターフェースを実装します

class SomeView : UserControl, IAcceptSomeNotificationMessage
{
    public void Notify() { // blah
    }
}

VM:

class SomeViewModel : Screen // whatever 
{
    void SomeMethod() 
    {
        // The VM should be IViewAware so will implement GetView()
        var view = GetView();

        if(view is IAcceptSomeNotificationMessage)
            (view as IAcceptSomeNotificationMessage).Notify();
    }
}

上記のいずれかを選択してください-もっと多くの方法があると確信しています。私は通常、イベントアグリゲーターを使用します。もちろん、使用しているIoCの量と、すべてがどの程度分離されているかによって異なります。

于 2012-11-29T22:09:43.547 に答える