6

请让大家知道我对 WPF 比较陌生。我正在ObservableCollection使用我的简单数据类的类型创建一个新的,并将其分配给ItemsSource我的DataGrid. 在我进入我的问题之前,这里是代码:

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”的属性需要关闭。好吧,我觉得自己像个脚后跟。谢谢!

4

2 回答 2

9

只需AutoGenerateColumns在您的DataGrid. 然后它将仅使用您指定的列。

于 2013-04-27T16:20:21.210 回答
1

只需将其设置AutoGenerateColumnsFalse. 默认情况下是True.

如果要显示班级的所有字段。不要在 XAML 中设置任何列。

但是,如果要显示选择性列,则设置AutoGenerateColumns为 false 并在 XAML 中写入各个列。

于 2013-04-27T01:12:43.950 回答