2016-05-12 12 views
2

コンストラクタにMVVMパターンとIoCを使用して複雑な型を渡すにはどうすればよいですか?新しいビューにどのようにナビゲートしますか?WPF MVVMナビゲーション渡しデータ

以下は、私がしたいことを示す単純化モデルです。

class Weekday { 
    List<Grocery> groceries; 
} 

class Grocery { 
    string name; 
} 

class WeekdaysVm { 
    List<Weekday> weekdays; 

    public WeekdaysVm(IService service) { ... } 
} 

class GroceriesVm { 
    public GroceriesVm(IService service, List<Grocery> groceries) { 
     ... 
    } 
    List<Grocery> groceries; 
} 

私は平日に表示して曜日を押しています。今では、平日にGroceryViewに移動したいと考えています.GroceriesVmに渡された食料品。 MVVMとIoCでこれをどうすればできますか?

設定がはるかに複雑で、全体で〜20のビューを移動すると想像してください。

答えて

3

MVVMにはナビゲーションの概念が含まれていないので、ビューとビューモデル内のMVVMの原則に違反することなく、ビュー間をどのようにナビゲートするといいでしょう。

私の意見では、INavigationFactoryという名前のクラスを作成して、それぞれのViewModelに注入する必要があります。次に、インターフェイス上で、あなたはあるかもしれないあなたが

Action GetPage1NavigationAction(); 
Action GetPage2NavigationAction(); 
Action GetPage3NavigationAction(); 

これらの方法の一つの実施例を作りたい別のナビゲーションのためのアクションを公開することができます:

public Action GetPage2NavigationAction() 
{ 
    var action =() => 
    { 
     var vm = new Page2ViewModel(); 
     var view = new Page2Page(); 
     view.DataCntext = vm; 
     Navigate(view); // or whatever method you'd call to navigate 
    } 
    return action; 
} 

を次に、あなたのPage1のViewModelに(用インスタンス)、あなたのボタンのクリックコマンドであなただけ持つことができます。

Avtion nextPageNav = navigationFactory.GetPage2NavigationAction(); 
nextPageNav(); 

あなたがページ間でデータを渡すためにあなたの工場出荷時のアクションにパラメータを含めることができます。