【问题标题】:WPF DataGrid ItemsSource IssueWPF DataGrid ItemsSource 问题
【发布时间】:2013-04-21 05:18:37
【问题描述】:

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

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 中创建的列 - - 反过来以两组相同的数据结束。我发现这是一种奇怪的行为,因为我发誓我以前见过人们以这种方式绑定到他们的网格。

我做错了什么?

编辑

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

【问题讨论】:

  • 这是来自内存,但您需要在 DataGrid 上设置 AutoGenerateColumns=false 吗?
  • @ChrisO 如果你能改变这个回答,我会把它给你。感谢您让我知道该物业!
  • 很高兴它有帮助。我创建了一个答案供您接受。谢谢!

标签: c# .net wpf datagrid itemssource


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    只需将其AutoGenerateColumns 设置为False。默认为True

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

    但如果您想显示选择性列,请将 AutoGenerateColumns 设置为 false 并在 XAML 中写入各个列。

    【讨论】:

      猜你喜欢
      • 2011-07-10
      • 2011-04-22
      • 2014-10-05
      • 1970-01-01
      • 2013-06-30
      • 2011-12-17
      • 2012-10-30
      • 1970-01-01
      • 2014-11-05
      相关资源
      最近更新 更多