6

私は比較的 WPF に慣れていないことをお知らせください。単純なデータ クラスの型で新しいを作成し、それを my のプロパティにObservableCollection割り当てています。私の問題に入る前に、コードは次のとおりです。ItemsSourceDataGrid

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_pFieldsIFields空間レイヤー情報を保存できるインターフェースオブジェクトです

  • IFieldsFieldCountコレクション内のいくつかのフィールドを返すプロパティがあります

  • DisplayedValueForRow(i)別の ArcGIS obj メソッドを呼び出しIPropertySet.GetProperty() て、値を返します。


問題:

すべてが本来あるべきように入力されていますが、何らかの奇妙な理由で、 XAMLで作成されたものを入力する上で、3 つの列 (名前、値、インデックス) を再度作成しています。同じデータ。以前にこの方法でグリッドにバインドする人を見たことがあるので、これは奇妙な動作であることがわかりました。

私は何を間違っていますか?

編集

ChrisO さんのコメントのおかげで、「AutoGenerateColumns」というプロパティをオフにする必要があることがわかりました。まあ、私はかかとのように感じます。ありがとう!

4

2 に答える 2

9

AutoGenerateColumnsでプロパティを false に設定するだけDataGridです。次に、指定した列のみを使用します。

于 2013-04-27T16:20:21.210 に答える
1

に設定するだけAutoGenerateColumnsですFalse。デフォルトでは ですTrue

クラスのすべてのフィールドを表示したい場合。XAML で列を設定しないでください。

ただし、選択的な列を表示する場合は、AutoGenerateColumnsfalse に設定し、個々の列を XAML に書き込みます。

于 2013-04-27T01:12:43.950 に答える