Wpf 为什么IntelliSense没有';t显示项目';具有DataGrid内置列的属性?

Wpf 为什么IntelliSense没有';t显示项目';具有DataGrid内置列的属性?,wpf,xaml,intellisense,wpfdatagrid,design-time,Wpf,Xaml,Intellisense,Wpfdatagrid,Design Time,我有以下ViewModel类: public class Item { public string ItemName { get; set; } } public class Container { public string ContainerName { get; set; } public List<Item> Items { get; } } 公共类项目 { 公共字符串ItemName{get;set;} } 公营货柜 { 公共字符串容器名称{ge

我有以下ViewModel类:

public class Item
{
    public string ItemName { get; set; }
}

public class Container
{
    public string ContainerName { get; set; }
    public List<Item> Items { get; }
}
公共类项目
{
公共字符串ItemName{get;set;}
}
公营货柜
{
公共字符串容器名称{get;set;}
公共列表项{get;}
}
我在窗口的XAML中使用它们来帮助IntelliSense在设计时:

<Window x:Class="DesignTime.MainWindow"
        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"
        xmlns:local="clr-namespace:DesignTime"
        mc:Ignorable="d"
        d:DataContext="{d:DesignInstance Type=local:Container, IsDesignTimeCreatable=True}"/>

现在,IntelliSense可以识别
容器的属性

因此,我创建了一个
ItemsControl
绑定到
容器的
Items
列表。当我编写单个显示项的
数据模板
的绑定时,IntelliSense现在向我显示
类的属性:

如果使用
列表框
列表视图
,也会发生同样的情况

但是使用
DataGrid
时出现了一些问题。如果我使用内置模板创建一个列,如
DataGridTextColumn
,IntelliSense会向我显示
容器的属性,而不是
项的属性

其他内置列也一样:
DataGridCheckBoxColumn

但是,如果我使用
DataGridTemplateColumn
编写自定义模板,它的工作原理与
ItemsControl
类似

为什么会这样?如何使IntelliSense正确使用
DataGrid
的内置列(如果可能的话)

为什么会这样

可能是因为
DataGridColumn
不是添加到可视化树中的
FrameworkElement
。它没有
DataContext
DataTemplate
的根元素确实被添加到可视化树中,并且有一个
DataContext
。这就是区别


你的回答似乎很合理,但有一件事我还是觉得很奇怪。我希望对内置列(如
DataGridCheckBoxColumn
)也使用隐式的
DataTemplate
。否则,如何将其呈现为
复选框


复选框最终在运行时生成,而不是在设计时生成。设计器不会运行运行时执行的所有代码。

DataGridColumn不是添加到可视化树中的框架元素,也没有DataContext。DataTemplate的根元素确实被添加到可视化树中,并且有一个DataContext。您的答案似乎合理,但有一件事我仍然觉得很奇怪。我希望对内置列(如
DataGridCheckBoxColumn
)也使用隐式的
DataTemplate
。它是如何作为复选框的呢?显然我认为这种行为在VisualStudio中缺乏特色。