2017-05-17 10 views
1

私のデータをXamarin.Forms MVVM-Architectureアプリケーションにロードする最も良い場所はどこですか?例:Xamarin.Forms MVVM-Applicationにデータをロードする場所は?

私はPickersを含むいくつかのContentPagesでタブ付きページを使用しています。 Pickers ItemsSourcesはViewModel-Propertyにバインドされています。 Pickers ItemsSource-Dataを読み込むロジックを置くにはどこが最適ですか?

私はViewModel-Constructorでそれを行うことができますが、コンストラクタでデータをロードするだけでは不正なコーディングであるため、推奨されていません。残念ながら、ページに「読み込まれた」ものが見つかりませんでした。たぶん "OnAppearing"イベントを使用できますか?

データの読み込みは非同期で、現時点ではMVVMフレームワークを使用していません。

+0

これを行うには、非同期的に別のスレッドが最適です。 – Will

答えて

1

これは、使用するMVVMフレームワークに依存します。私は個人的にはFreshMvvmを好む。これにはInitメソッドがあり、データをロードするのに理想的なViewModelでオーバーライドできます。また、簡単なナビゲーション方法を提供します。 Initメソッドは、新しいビューをナビゲーションスタックにプッシュするときにデータを渡す場所でもあります。それ以外にも、それはViewIsAppearingViewIsDisappearingメソッドを提供します。

public override void Init (object initData) 
{ 
    base.Init (initData); 
} 

public override void ReverseInit(object returnedData) 
{ 
    base.ReverseInit(returnedData); 
} 

protected override void ViewIsAppearing(object sender, EventArgs e) 
{ 
    base.ViewIsAppearing(sender, e); 
} 

protected override void ViewIsDisappearing(object sender, EventArgs e) 
{ 
    base.ViewIsDisappearing(sender, e); 
} 
+0

ありがとうございます。現時点では、私はMVVM-Frameworkをまったく使用していないので、すべてのViewModelが.netstandard 1.6プロジェクトに保存されているため、mvvm lightとfreshmvvmがビューとモデルを同じプロジェクトに入れているようです。しません。 新鮮なmvvmのinitメソッドが呼び出されたときは、おそらくあなたは知っていますか? –

+0

組み込みのIOCコンテナがPageModelのインスタンスを解決しようとすると呼び出されます。これは、 'FreshPageModelResolver'クラスを通して行われます。https://github.com/rid00z/FreshMvvm/blob/master/src/FreshMvvm/FreshPageModelResolver.cs –

+0

ありがとうございます。私はautofacをIoCとして使用しているので、登録したインスタンスのOnActivatingイベントでthehビューを初期化しようとすることができます。 –

関連する問題