1

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

然后这个父视图可以显示一个子视图(通过 NavigationService,又名导航:框架)。

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

我怎样才能做到这一点?因为通过在子视图的 xaml 中声明相同的视图模型将意味着子视图获得它自己的视图模型实例(即,它与父视图不同的视图模型实例)。

谢谢!

4

3 回答 3

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;
    }
}
于 2010-07-12T22:47:11.987 回答
1

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

我的黑客解决方案:

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

干杯。

于 2010-07-12T22:17:56.160 回答
0

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

于 2010-07-12T22:28:56.540 回答