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