2016-05-12 45 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(); 

您可以在工厂操作中包含参数以在页面之间传递数据。