如何在父/子视图(Silverlight 3.0)之间共享ViewModel?

时间:2010-07-12 21:50:56

标签: silverlight views viewmodel sharing

我有一个父视图,它是xaml绑定到ViewModel(视图模型在xaml中声明)。

此父视图可以显示子视图(通过NavigationService,也就是导航:框架)。

父视图永远不会超出范围,但我希望新的子视图共享父视图模型。

我该怎么做?因为通过在子视图中声明相同的视图模型,xaml意味着子视图获取它自己的viewmodel实例(即它与它的父视图不是相同的viewmodel实例)。

谢谢!

3 个答案:

答案 0 :(得分:2)

听起来像(a)使用MEF的绝佳机会。导出视图模型,然后在父视图和子视图中导入它。默认情况下,它们将共享同一个对象。或者(b)创建一个定位器类,用于跟踪视图模型实例,通过静态属性公开,并使用该静态属性检索父项和子项中的视图模型:

public static class Locator 
{
   private static readonly MyViewModel _instance = new MyViewModel();

   public static MyViewModel Instance 
   {
      get { return _instance; }
   }
}

public partial class MyView
{
    public MyView()
    {
       InitializeComponent();
       LayoutRoot.DataContext = Locator.Instance;
    }
}

答案 1 :(得分:1)

好吧,直到有人给我一个很好的答案,我将使用以下解决方案(如果它工作,因为我还没有真正测试过它)。

我的黑客解决方案:

ViewModel将具有对其自身的公共静态引用。 然后子视图将其DataContext设置为ViewModel的静态引用。

干杯。

答案 2 :(得分:0)

子视图从其父视图继承其DataContext,无需再次声明或分配它。