如何使用MVVM模式和IoC将复杂类型传递给构造函数?你将如何导航到新视图?
下面是一个简化的模型,显示了我想要做的事情。
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.Groceries传递给GroceriesVm。我将如何使用MVVM和IoC?
请想象这个设置要复杂得多,有大约20个视图可以在整个地方导航。
答案 0 :(得分:3)
在我看来,你应该创建一个名为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(例如)中,在你的Button click命令中你可以拥有:
Avtion nextPageNav = navigationFactory.GetPage2NavigationAction();
nextPageNav();
您可以在工厂操作中包含参数以在页面之间传递数据。