CanUserAddRows="True"
仅当ItemsSource
的{{1}}中已有数据时才“有效”。如果恰好发生原始项目列表中没有行,则DataGrid
不会显示用于输入新项目的DataGrid
行,即使我已设置placeholder
}。为什么呢?!
提前致谢, Trindaz
答案 0 :(得分:2)
这似乎是WPF DataGrid的一个已知问题。请参阅讨论here(从第4条评论开始)它似乎也在.net 4中得到修复。我在3.5和4(beta2)框架上对此问题进行了一些测试。请参阅下面的结果:
首先,我定义了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>();
希望这有帮助,尊重
答案 1 :(得分:1)
将空项添加到ItemsSource,然后将其删除。执行此操作后,您可能必须将CanUserAddRows设置为true。我读了这个解决方案here :( Jarrey和Rick Roen的帖子)
当我将ItemsSource设置为DataTable的DefaultView并且视图为空时,我遇到了这个问题。尽管定义了列,但它应该能够获得它们。嘿。