c# - 在 C# 中,如何在 ViewModel 的 View 上设置 DataContext?

标签 c# wpf mvvm binding datacontext

我正在尝试围绕 MVVM 进行思考。我理解了很多,但我很难掌握一个方面:设置 DataContext

我想显示带有特定对象的 View 。用户无法决定什么是可见的,因此我需要在代码中创建 View 。然后,我想将 View 的 DataContext 设置为一个对象(用于绑定(bind))。我试图不为此将代码放在 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;
    }
}

最佳答案

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

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

约什·史密斯的 article在 MVVM 上有一个 section将 View 应用于 ViewModel。他建议使用 WPF 的数据模板在 XAML 中选择您的 View 。

关于c# - 在 C# 中,如何在 ViewModel 的 View 上设置 DataContext?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1044365/

相关文章:

c# - MSSQL超时错误

c# - 当属性抛出错误时,如何将其设置为空值?

c# - 模型- View - View 模型中的适配器

wpf - 增强的 WPF 菜单

C# 停止一次又一次调用 MDI 子项

c# - 如何在 C# 中初始化结构

c# - ListView 页脚行 - 水平滚动

wpf - 如何在 Expression Blend 中显示带有设计时源的图像

wpf - WPF:ItemsPanelTemplate中的WrapPanel扩展列表宽度

c# - 带集合的 MVVM