4

我正在尝试围绕 MVVM 进行思考。我了解很多,但我很难掌握一个方面:设置 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;
    }
}
4

2 回答 2

7

不要忘记 View 应该知道 ViewModel,而不是相反。

因此,在您的情况下,将代码放入 ViewModel 以创建视图并不是最好的方法。

Josh Smith关于 MVVM的文章有一介绍了将 View 应用于 ViewModel。他建议使用 WPF 的 DataTemplates 在 XAML 中选择您的视图。

于 2009-06-25T14:56:44.167 回答
0

如果您使用 XAML 控件或窗口(如果您使用 MVVM,则应该是这种情况),LayoutRoot(默认为网格)是公共的。在您的示例中,您只为 View 使用了一个普通类,因此很难判断发生了什么。

另外,我赞同 Cameron 的观点——View 或 ModelView 也不应该处理分配 DataContext。它可以通过不同的方式完成(DataTemplate、依赖注入、特殊构建器类、纯代码),但通常发生在应用程序级别。

于 2009-06-25T18:35:24.687 回答