在C#中,我该如何从ViewModel设置View的DataContext?

4
我正在努力理解MVVM模式,虽然我理解了很多内容,但是我在理解一个方面时遇到了困难:设置DataContext
我想显示一个特定对象的视图。用户不能决定什么可见,所以我需要在代码中创建视图。然后,我想将视图的DataContext设置为一个对象(用于绑定)。我尝试不要在View中添加代码来完成这个步骤,但是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;
    }
}
2个回答

7
不要忘记View应该知道ViewModel,而不是反过来。
因此,在您的情况下,在ViewModel中放置代码以创建视图并不是最佳选择。
Josh Smith关于MVVM的文章中有一个部分介绍将View应用于ViewModel。他建议使用WPF的DataTemplates在XAML中选择您的View。

非常感谢你的帮助,它让我朝着正确的方向前进了一步。 - Jeremiah

0

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

此外,我赞同Cameron的观点 - 无论是View还是ModelView都不应处理分配DataContext的问题。它可以通过不同的方式完成(DataTemplate、依赖注入、特殊构建器类、纯代码),但通常是在应用程序级别上完成的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接