2016-05-12 70 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; 
} 

說我在WeekdaysView並按工作日。現在我想在週日時間導航到GroceryView.Groceries傳遞到GroceriesVm。我如何使用MVVM和IoC來做到這一點?

請想象這個設置是非常複雜的,有20多個視圖可以在整個地方導航。

回答

3

MVVM不包含導航的概念,所以你問的是如何在不違反視圖和視圖模型中的MVVM原則的情況下瀏覽視圖。

在我看來,你應該創建一個名爲INavigationFactory(例如),可以注入到每個ViewModel類。在第1頁視圖模型

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; 
} 

然後(爲:然後在界面上,你可以公開操作爲你想

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

這些方法中的一個實施的例子不同的導航可能在您的按鈕單擊命令中,您可以只有:

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

您可以在工廠操作中包含參數以在頁面之間傳遞數據。