我有一个父视图,它是xaml绑定到ViewModel(视图模型在xaml中声明)。
此父视图可以显示子视图(通过NavigationService,也就是导航:框架)。
父视图永远不会超出范围,但我希望新的子视图共享父视图模型。
我该怎么做?因为通过在子视图中声明相同的视图模型,xaml意味着子视图获取它自己的viewmodel实例(即它与它的父视图不是相同的viewmodel实例)。
谢谢!
答案 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,无需再次声明或分配它。