CanUserAddRows="True"
仅在DataGrid
的ItemsSource
中已有数据时才“有效”。如果只是在原始项目列表中没有行,则DataGrid
不会显示用于输入新项目的placeholder
行,即使我已设置CanUserAddRows="True"
。为什么?!当数据源为空时,WPF DataGrid无法添加一行
由于提前, Trindaz
CanUserAddRows="True"
仅在DataGrid
的ItemsSource
中已有数据时才“有效”。如果只是在原始项目列表中没有行,则DataGrid
不会显示用于输入新项目的placeholder
行,即使我已设置CanUserAddRows="True"
。为什么?!当数据源为空时,WPF DataGrid无法添加一行
由于提前, Trindaz
这似乎是一个已知的问题与WPF的DataGrid。请参阅讨论here(从第4条评论开始)此外,它似乎在.net 4中得到了修复。我在3.5和4(beta2)框架上对此问题进行了一些测试。 PLS,见下面的结果:
首先我定义3种类型的项目的集合:
public class TestGridItems0 : ArrayList
{
}
public class TestGridItems1 : List<TestGridItem>
{
}
public class TestGridItems2<T> : List<TestGridItem>
{
}
其中TestGridItem低于:
public class TestGridItem
{
public string One { get; set; }
public string Two { get; set; }
public string Three { get; set; }
}
.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>
下面
是项目源是如何分配的:
dataGrid.ItemsSource = new TestGridItems0();
dataGrid.ItemsSource = new TestGridItems1();
dataGrid.ItemsSource = new TestGridItems2<TestGridItem>();
希望这会有所帮助,至于
简单的'.ToList()'转换解决了这个问题。谢谢你的提示。 – 2017-10-25 12:02:40
添加一个空的项目到您的ItemsSource,然后删除它。完成此操作后,您可能必须将CanUserAddRows重新设置为true。我读这个解决方案here:(由Jarrey和瑞克罗恩发布)
我有这个问题,当我将ItemsSource设置为DataTable的DefaultView和视图是空的。列被定义,但应该能够得到它们。嘿。
还会发生什么,你不能向右滚动查看屏幕以外的列,因为你没有没有项目的水平滚动条。 – 2010-01-16 07:21:10