我有一個父視圖,它是xaml綁定到ViewModel(viewmodel是在xaml中聲明的)。如何在父/子視圖(Silverlight 3.0)之間共享ViewModel?
此父視圖可以顯示子視圖(通過NavigationService,又名導航:框架)。
父視圖永遠不會超出範圍,但我希望新的子視圖共享父視圖模型。
我怎樣才能做到這一點?因爲通過在子視圖的xaml中聲明相同的視圖模型將意味着子視圖獲取它自己的視圖模型實例(即,它不是與其父視圖相同的視圖模型實例)。
謝謝!
我有一個父視圖,它是xaml綁定到ViewModel(viewmodel是在xaml中聲明的)。如何在父/子視圖(Silverlight 3.0)之間共享ViewModel?
此父視圖可以顯示子視圖(通過NavigationService,又名導航:框架)。
父視圖永遠不會超出範圍,但我希望新的子視圖共享父視圖模型。
我怎樣才能做到這一點?因爲通過在子視圖的xaml中聲明相同的視圖模型將意味着子視圖獲取它自己的視圖模型實例(即,它不是與其父視圖相同的視圖模型實例)。
謝謝!
聽起來像是(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;
}
}
那麼,直到有人給我一個很好的答案,我將使用以下解決方案(如果它工作,因爲我還沒有真正測試過它)。
我砍的解決方案:
的視圖模型將有一個公共靜態引用本身。 然後,子視圖將其DataContext設置爲ViewModel的靜態引用。
乾杯。
子視圖從其父視圖繼承它的DataContext,不需要再次聲明或分配它。
對不起,它不是它的父母的真正孩子。我應該說它是一個子視圖(即由其父視圖創建/擁有的視圖)。這裏沒有繼承。 – AlvinfromDiaspar 2010-07-12 22:31:13
確認這作品作爲可能的解決方案。 – AlvinfromDiaspar 2010-07-12 22:30:16