WPF DataGrid ItemsSource Issue
本文关键字:Issue ItemsSource DataGrid WPF | 更新日期: 2023-09-27 18:11:09
请让它知道,我是相对较新的WPF。我正在用我的简单数据类的类型创建一个新的ObservableCollection
,并将其分配给我的DataGrid
的ItemsSource
属性。在我开始讨论我的问题之前这里是代码:
XAML :
<my:DataGrid SelectionMode="Single" SelectionUnit="Cell" Height="113" HorizontalAlignment="Left" Margin="11,22,0,0" Name="addressGrid" VerticalAlignment="Top" Width="213" Background="#FFE2E2E2" AlternatingRowBackground="#FFA4CFF2" BorderBrush="#FF7C7C7C" HorizontalGridLinesBrush="White" PreviewKeyDown="addressGrid_PreviewKeyDown" CellEditEnding="addressGrid_CellEditEnding" BeginningEdit="addressGrid_BeginningEdit" PreparingCellForEdit="addressGrid_PreparingCellForEdit">
<my:DataGrid.Columns>
<my:DataGridTextColumn Header="Name" Width="*" Binding="{Binding Path=Name}"></my:DataGridTextColumn>
<my:DataGridTextColumn Header="Value" Width="3*" Binding="{Binding Path=Value}"></my:DataGridTextColumn>
<my:DataGridTextColumn Header="Index" Visibility="Hidden" Binding="{Binding Path=Index}"></my:DataGridTextColumn>
</my:DataGrid.Columns>
</my:DataGrid>
数据类:
public class PropertyFields
{
public string Name { get; set; }
public object Value { get; set; }
public int Index { get; set; }
}
人口:
ObservableCollection<PropertyFields> propertyList = new ObservableCollection<PropertyFields>();
for (int i = 0; i < m_pFields.FieldCount - 1; ++i)
{
propertyList.Add(new PropertyFields() {Name = m_pFields.Field[i].AliasName, Value = DisplayedValueForRow(i), Index = i});
}
// Set ItemSource to populate grid
addressGrid.ItemsSource = propertyList;
关于总体方法的更多信息:
我正在用ArcGIS框架构建这个解决方案,所以有些东西不是"系统"的方式。
m_pFields
是一个IFields
接口对象,允许我存储空间层信息IFields
有一个FieldCount
属性,它返回集合中的一些字段DisplayedValueForRow(i)
调用另一个ArcGIS obj方法IPropertySet.GetProperty()
并返回值
问题:
一切都被填充,因为它应该是,但由于一些奇怪的原因,它重新创建了三个列(名称,值,索引)再次在顶部填充在XAML中创建的—反过来结束了2组相同的数据。我发现这是一种奇怪的行为,因为我发誓我以前见过人们以这种方式绑定到他们的网格。
我做错了什么?
编辑
多亏了ChrisO的评论,我发现有一个名为"AutoGenerateColumns"的属性需要关闭。我觉得自己像个脚后跟。谢谢!
在DataGrid
上设置AutoGenerateColumns
属性为false。然后,它将只使用您指定的列。
只需将其AutoGenerateColumns
设置为False
。默认为True
。
如果您想显示类的所有字段。不要在XAML中设置任何列。
但是如果你想显示选择性列,那么设置AutoGenerateColumns
为false并在XAML中写单独的列。