当数据源为空时,WPF DataGrid无法添加行

当数据源为空时,WPF DataGrid无法添加行,wpf,datagrid,row,itemssource,Wpf,Datagrid,Row,Itemssource,CanUserAddRows=“True”只有在DataGrid的ItemsSource中已有数据时才“起作用”。如果恰好在原始项目列表中没有行,那么即使我设置了CanUserAddRows=“True”,数据网格也不会显示用于输入新项目的占位符行。为什么 提前感谢,, Trindaz这似乎是WPF DataGrid的一个已知问题。参见讨论(从第4条评论开始),它似乎在.NET4中也得到了修复。我已经在3.5和4(beta2)框架上对此问题进行了一些测试。请参见以下结果: 首先,我定义了3种类型

CanUserAddRows=“True”
只有在
DataGrid
ItemsSource
中已有数据时才“起作用”。如果恰好在原始项目列表中没有行,那么即使我设置了
CanUserAddRows=“True”
,数据网格也不会显示用于输入新项目的
占位符行。为什么

提前感谢,,
Trindaz

这似乎是WPF DataGrid的一个已知问题。参见讨论(从第4条评论开始),它似乎在.NET4中也得到了修复。我已经在3.5和4(beta2)框架上对此问题进行了一些测试。请参见以下结果:

首先,我定义了3种类型的项目集合:

public class TestGridItems0 : ArrayList
{
}

public class TestGridItems1 : List<TestGridItem>
{
}

public class TestGridItems2<T> : List<TestGridItem>
{
}
.net 3.5

TestGridItems0和TestGridItems1没有为空集合显示空行;其中TestGridItems2工作正常

.net 4

只有TestGridItems0没有显示空集合的行;另外两个很好

网格的xaml:

<my:DataGrid Name="dataGrid" AutoGenerateColumns="False" CanUserAddRows="True">
    <my:DataGrid.Columns>
        <my:DataGridTextColumn Binding="{Binding One}" Header="One" />
        <my:DataGridTextColumn Binding="{Binding Two}" Header="Two" />
        <my:DataGridTextColumn Binding="{Binding Three}" Header="Three" />
    </my:DataGrid.Columns>
</my:DataGrid>

以下是如何分配项目源:

dataGrid.ItemsSource = new TestGridItems0();
dataGrid.ItemsSource = new TestGridItems1();
dataGrid.ItemsSource = new TestGridItems2<TestGridItem>();
dataGrid.itemsource=newtestgriditems0();
dataGrid.ItemsSource=新的TestGridItems1();
dataGrid.ItemsSource=新的TestGridItems2();

希望这能有所帮助,请在ItemsSource中添加一个空项目,然后将其删除。执行此操作后,可能必须将CanUserAddRows设置回true。我读了这个解决方案:(Jarrey和Rick Roen的帖子)


当我将ItemsSource设置为DataTable的DefaultView并且该视图为空时,出现了这个问题。不过,这些列是定义的,所以它应该能够获取它们。嘿。

另外,由于没有带项目的水平滚动条,您无法向右滚动查看屏幕外的列。一个简单的
.ToList()
转换解决了这个问题。谢谢你的提示。
dataGrid.ItemsSource = new TestGridItems0();
dataGrid.ItemsSource = new TestGridItems1();
dataGrid.ItemsSource = new TestGridItems2<TestGridItem>();