WPF MVVM导航传递数据



如何使用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个视图。

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();

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

相关内容

  • 没有找到相关文章

最新更新