2011-08-18 125 views
1

我正在使用PRISM的项目中,我已经将导航实现为树视图,并且任何单击事件都会发生使用事件aggergation引发事件的注册模块多视图的多视图模型(如向导应用程序,您可以通过许多视图收集数据)。我想拥有一个可以通过这个视图模型传递的共同或共享或单例模型,并最终保存....用户可以随时点击任何导航链接,它应该将数据保存到此单例模型expsosed通过不同的视图模型。你有没有像这样做的样品......或者你可以快速打开一下如何做到这一点?或者根本无法做到这一点。我正在关注Brian Lagunas的Pluralsight Video for PRISM的所有模式,所以请尽量使用这种方式....将模型的单实例传递到同一个模块中的多个视图对于不同的视图

回答

0

我不知道,是棱镜方式还是别的什么东西,当我构建像向导一样的东西时,首先所有我创建向导收集的所有数据的实例。

public WizardData wd = new WizardData(); 

然后,向导的每一页都被这个wd实例初始化,即

public FirstWizardPage(WizardData wd) 
{ 
    this.wizardData = wd; 
} 

所以,这种方式让你有在每一页上按钮Finish,例如。您可以使用wd或其属性初始化您的ViewModel

这种方式不是最好的。它只是可能的方式之一。

另一个 - 是创建单例并使用它,而不需要通过页面到页面的引用。

0

当你使用棱镜时,你也有一个依赖注入容器,通常是Unity或MEF。为了解决你的问题,你可以注册你的模型作为单身到那些DI容器。每个查看模型要求DI容器解决它们的依赖关系,在我们的特殊情况下,模型将从DI容器中获取单例实例。

统一例如:你注册你的模型作为单一实例:

public void Initialize() 
{ 
    container.RegisterInstance<Model>(new Model(), new ContainerControlledLifetimeManager()); 
} 

现在你可以解决您的视图模型的依赖性:

public ViewModel(IUnityContainer container) 
{ 
    Model model = container.Resolve<Model>(); 
} 
2

我想有一个MasterViewModel控制的“向导“页面和当前状态

它将包含以下属性:

  • List<ViewModelBase> Pages
  • int CurrentPageIndex
  • ViewModelBase CurrentPage,它返回Pages[CurrentPageIndex]
  • MyClass DataObject

,与MasterViewModel去的MasterView只不过是将一个ContentControl更与它的Content势必CurrentPage。我可能也是在MasterView告诉WPF这View绘制与Page

MasterViewModel将负责处理的网页,并通过每个页面需要的数据的引用定义DataTemplates。例如在构造函数中它可能会说,

public MasterViewModel(MyClass dataObject) 
{ 
    DataObject = dataObject; 

    Pages.Add(new InfoPage(DataObject)); 
    Pages.Add(new AddressPage(DataObject.Addresses)); 
    Pages.Add(new PhonePage(DataObject.Phones)); 
    Pages.Add(new SaveMyClassPage(DataObject)); 

    CurrentPageIndex = 0; 
} 

我有一个例子here如果你有兴趣

相关问题