2009-06-25 83 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,依赖注入,特殊构建器类,普通代码),但通常发生在应用程序级别。

相关问题