WPF DataGrid ItemsSource问题

时间:2013-04-26 23:09:24

标签: c# .net wpf datagrid itemssource

请让我知道我对WPF相对较新。我正在使用我的简单数据类的类型创建一个新的ObservableCollection,并将其分配给我ItemsSource的{​​{1}}属性。在我进入我的问题之前,这里是代码:

XAML

DataGrid

数据类

<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; }
}

有关人口方法的更多信息:

我正在使用ArcGIS框架构建此解决方案,因此有些东西不是“系统”。

  • 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; 是一个m_pFields接口对象,允许我存储空间图层信息

  • IFieldsIFields属性,可返回集合中的多个字段

  • FieldCount调用另一个ArcGIS obj方法DisplayedValueForRow(i)并返回该值。


问题:

所有内容都应该被填充,但由于某些奇怪的原因,它会再次重新创建三列(名称,值,索引) ON TOP 填充在XAML中创建的那些 - - 最后得到2组相同的数据。我发现这是一种奇怪的行为,因为我发誓我以前看到人们以这种方式绑定他们的网格。

我做错了什么?

修改

感谢ChrisO的评论,我发现有一个名为“AutoGenerateColumns”的属性需要关闭。好吧,我觉得自己像一个鞋跟。谢谢!

2 个答案:

答案 0 :(得分:9)

只需在AutoGenerateColumns上将DataGrid属性设置为false即可。然后它只会使用您指定的列。

答案 1 :(得分:1)

只需将其AutoGenerateColumns设置为False即可。默认情况下为True

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

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