3

datagridいくつかのオブジェクトをでバインドしたいと思いますWPF。私はDataTableを避けたいと思っています!

次のコードを検討してください。

public ObservableCollection<ObservableCollection<DataPoint>> GridItems { get; set; }

public class DataPoint : INotifyPropertyChanged
{
    public float Value { get; set; }
    public float OriginalValue { get; set; }
    public bool Highlighted { get; set; }
    public SolidColorBrush HighlightColor { get; set; }
    ...
}

XAML:

<toolkit:DataGrid ItemsSource="{Binding GridItems}" />

DataGridセルごとに1つのDataPointオブジェクトを取得する代わりに、これをバインドするとCount、示されているプロパティとして1つの列が取得されます。2D配列、カスタムタイプ(から継承ObservableCollection<DataPoint>)を試しHierarchicalDataTemplateましたが、何も機能していないようです。

何列になるかは事前にはわかりませんが、すべての行で常に同じ数とタイプになります。助言がありますか?

4

1 に答える 1

2

ItemsSource、を検討すると、グリッドの各行が単なるオブジェクトであることがわかります。これは、コレクション内の各アイテムを確認するのに十分なほど賢くはありません(また、意味がありません。コレクションごとにアイテムの数が異なる可能性があるため、アイテムを列に自動的にマップすることはできません)。行のオブジェクトを確認し、パブリックプロパティを列として使用します(この場合、修飾されるプロパティは)のみです。ObservableCollectionObservableCollectionObservableCollectionDataGridDataContextObservableCollectionCount

IBindingList編集:より複雑なバインディングシナリオを可能にするインターフェイスを思い出しました(これはDataTable、バインディングの目的で列をプロパティとして公開する方法だと思います。この回答を参照してIBindingList、どのように役立つかを確認してください。DataPointsをプロパティとして公開するために派生しObservableCollectionて実装するカスタムクラスを作成できる場合があります。IBindingList

オリジナル:

列がいくつあるかわからないため、XAMLを介してそれらを宣言的にデータバインドすることはできません。コードで列を手動で作成し、各列のバインディングを設定する必要があると思います。

DataTemplateまた、タイプを視覚的に表示する方法を認識できるように、DataPointタイプのが必要になります。

于 2012-08-21T02:26:24.357 に答える