2010-07-12 34 views
1

我有一個父視圖,它是xaml綁定到ViewModel(viewmodel是在xaml中聲明的)。如何在父/子視圖(Silverlight 3.0)之間共享ViewModel?

此父視圖可以顯示子視圖(通過NavigationService,又名導航:框架)。

父視圖永遠不會超出範圍,但我希望新的子視圖共享父視圖模型。

我怎樣才能做到這一點?因爲通過在子視圖的xaml中聲明相同的視圖模型將意味着子視圖獲取它自己的視圖模型實例(即,它不是與其父視圖相同的視圖模型實例)。

謝謝!

回答

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

那麼,直到有人給我一個很好的答案,我將使用以下解決方案(如果它工作,因爲我還沒有真正測試過它)。

我砍的解決方案:

的視圖模型將有一個公共靜態引用本身。 然後,子視圖將其DataContext設置爲ViewModel的靜態引用。

乾杯。

+0

確認這作品作爲可能的解決方案。 – AlvinfromDiaspar 2010-07-12 22:30:16

0

子視圖從其父視圖繼承它的DataContext,不需要再次聲明或分配它。

+0

對不起,它不是它的父母的真正孩子。我應該說它是一個子視圖(即由其父視圖創建/擁有的視圖)。這裏沒有繼承。 – AlvinfromDiaspar 2010-07-12 22:31:13

相關問題