【问题标题】:Setting DataContext on DataGrids在 DataGrids 上设置 DataContext
【发布时间】:2012-09-07 11:59:43
【问题描述】:

我使用 WPF 和 MVVM 开发了一个应用程序。在其中我有一个带有 DataGrid 的窗口。它的 ViewModel 包含一些窗口属性和一个 DataGrid 属性(ObservableCollection<DataGridItemViewModel>)。

在window xaml中我这样设置设计DataContext:

<Window x:Class="XXX"

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

            mc:Ignorable="d"

            d:DataContext="{d:DesignInstance TheTypeOfTheWindowViewModelHere}">

然后我想以这种方式将设计 DataContext 设置到 DataGrid 上:

<DataGrid ItemsSource="{Binding Path=PropertyOfTheDataGrid}" d:DataContext="{d:DesignInstance DataGridItemViewModel}" >

然后我收到一条警告,告诉我在 DataGridItemViewModel 中找不到 PropertyOfTheDataGrid。

我以为我只设置了 ItemsSource 的 DataContext,但我不确定我做错了还是某种问题。

提前致谢。

【问题讨论】:

    标签: c# wpf mvvm resharper datacontext


    【解决方案1】:

    我不太确定你在期待什么?根据您的命名标准,您有一个DataGridItemViewModel,这表明您希望将视图模型上下文应用于每个数据网格项?

    通常,您会将一个视图模型应用于整个视图,然后在该视图模型上拥有一个属性,例如 ObservableCollection,它是您网格的项目集合。然后,您可以将 DataGridItemsSource 设置为绑定到该集合属性。

    ItemsSource="{Binding MyItems}"
    

    您通常不需要直接设置网格的数据上下文,它会使用视图的数据上下文(在本例中为 Window)。

    【讨论】:

    • 这就是我所拥有的,一个 ObservableCollection。如果我不设置网格的数据上下文,我会收到有关未知属性的警告。我认为这是与 resharper 相关的问题。
    • 是的,确实如此。这都与 Visual Studio 的警告有关。一切正常。
    • 警告是有效的,因为 DataGridItemViewModel 上不存在该属性,所以我会从数据网格中删除数据上下文,因为您希望数据上下文保留为 Window 的数据上下文(即TheTypeOfTheWindowViewModelHere)
    • 是的,但是我收到了关于 DataGrid 列绑定的警告。
    猜你喜欢
    • 2012-11-09
    • 1970-01-01
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    • 2013-12-26
    • 1970-01-01
    • 2010-11-24
    • 2014-09-21
    相关资源
    最近更新 更多