3

最近、Caliburn.Microフレームワークを使用しています。ShellViewと2つの画面があり、ScreenOneとScreenTwoと呼びます。ScreenOneからScreenTwoにデータを渡そうとしています。私はウェブを広範囲に調べましたが、これを見つけるのがそれほど難しいとは信じられません。誰かがこれを行う方法を知っていますか?

4

2 に答える 2

4

1つの代替方法は、イベントアグリゲーターを使用し、パブリッシュ/サブスクライブ手法を使用して画面間で通信することです。イベントアグリゲーターのチュートリアルには、2つのビューモデルが独自のイベントを公開し、他のビューモデルのイベントをサブスクライブする例があります。この例は、1つのソースコードサンプルHelloEventAggregatorでさらに詳しく説明されています。

于 2012-06-26T16:42:09.953 に答える
3

ShellViewModelあなたがコンダクターであり、との両方への参照があるScreenOneViewModelと仮定するとScreenTwoViewModel、コンストラクターパラメーターとして構築ポイント(つまり、これらのビューモデルをインスタンス化するとき)でビューモデルにデータを渡すか、後でパブリックメソッドを介してデータを渡すことができます。またはプロパティ。

ビューモデルファクトリを使用する例:

public class ShellViewModel : Conductor<IScreen>.Collection.OneActive 
{
    private readonly IScreenOneViewModelFactory screenOneViewModelFactory;

    private readonly IScreenTwoViewModelFactory screenTwoViewModelFactory;

    public ShellViewModel(
            IScreenOneViewModelFactory screenOneViewModelFactory,
            IScreenTwoViewModelFactory screenTwoViewModelFactory)
    {
       this.screenOneViewModelFactory = screenOneViewModelFactory;
       this.screenTwoViewModelFactory = screenTwoViewModelFactory;

       var screenOneViewModel = this.screenOneViewModelFactory.CreateViewModel();
       this.ActivateItem(screenOneViewModel);
    }

    public void MyMethod()
    {
       // Get data from screen one
       var myData = this.screenOneViewModel.Data;

       // Create a screen two view model from the screen one data
       var screenTwoViewModel = 
            this.screenTwoViewModelFactory.CreateViewModel(myData);
       this.ActivateItem(screenTwoViewModel);           
    }
}
于 2012-06-26T15:17:10.860 に答える