2009-06-25 81 views
3

我「米試圖總結我的周圍MVVM的頭,我明白了很多,但我有困難抓一個方面:。設置的DataContext在C#中,如何在ViewModel的View上設置DataContext?

我要顯示與特定對象的視圖。用戶不會決定什麼是可見的,所以我需要在代碼中創建視圖。然後,我想將視圖的DataContext設置爲一個對象(用於綁定)。我試圖不把代碼放入查看這一點,但View.LayoutRoot.DataContext是不公開的

我缺少什麼

試圖避免這種情況:?

public class View 
{ 
    public View(object dataContext) 
    { 
     InitializeComponent(); 
     LayoutRoot.DataContext = dataContext; 
    } 
} 

像這樣的東西:

public class ViewModel 
{ 
    ... 

    public UIElement GetView() 
    { 
     UIElement *element = new View(); 
     element.LayoutRoot.DataContext = element; 
     return element; 
    } 
} 

回答

7

不要忘記查看應該知道視圖模型,而不是周圍的其他方式。

所以在你的情況下,在ViewModel中放置代碼來創建視圖並不是最好的方法。

MVVM上的Josh Smith的article將視圖應用到ViewModel上有一個section。他建議使用WPF的DataTemplates來選擇您在XAML中的視圖。

+0

感謝您的幫助一堆。它把我推向了正確的方向。 – Jeremiah 2009-06-25 20:20:49

0

如果您使用XAML控件或窗口(如果您使用MVVM,應該是這種情況),LayoutRoot(默認爲Grid)是公共的。在你的例子中,你只使用View的普通類,所以很難說出發生了什麼。另外,我第二個Cameron的觀點 - View或ModelView都不應該處理分配DataContext的問題。它可以以不同的方式完成(DataTemplate,依賴注入,特殊構建器類,普通代碼),但通常發生在應用程序級別。

相關問題