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

Tri*_*daz 8 wpf datagrid row itemssource

CanUserAddRows="True"只有"工作"时,有已经在数据ItemsSourceDataGrid.如果恰好在原始项目列表中没有行,则即使我已设置,DataGrid也不会显示placeholder用于输入新项目的行CanUserAddRows="True".为什么?!

提前谢谢,Trindaz

ser*_*nko 4

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

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

public class TestGridItems0 : ArrayList
{
}

public class TestGridItems1 : List<TestGridItem>
{
}

public class TestGridItems2<T> : List<TestGridItem>
{
}
Run Code Online (Sandbox Code Playgroud)

其中 TestGridItem 如下:

public class TestGridItem
{
    public string One { get; set; }
    public string Two { get; set; }
    public string Three { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

.net 3.5

TestGridItems0 和 TestGridItems1 没有显示空集合的空行;其中 TestGridItems2 确实工作正常。

.net 4

只有 TestGridItems0 没有显示空集合的行;其他2个工作得很好。

网格的 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>
Run Code Online (Sandbox Code Playgroud)

以下是项目来源的分配方式:

dataGrid.ItemsSource = new TestGridItems0();
dataGrid.ItemsSource = new TestGridItems1();
dataGrid.ItemsSource = new TestGridItems2<TestGridItem>();
Run Code Online (Sandbox Code Playgroud)

希望这有帮助,问候