1

次のようなコレクションがあります。

ObservableDictionary<string, ObservableDictionary<string, SystemStatusItem>> ObservableColoServerStatus

次のようにバインドしたいユーザーコントロールの作成に取り組んでいます。

  • 外部ディクショナリの各キー (文字列) キーは、エキスパンダを動的に作成する必要があります。
  • そのエキスパンダーの内部には、情報のコレクションを表示するための ListView/DataGrid/いくつかのコントロールがあります
  • ListView/DataGrid の各行などは、(文字列) Key と内部辞書の (object)Value のプロパティの組み合わせで構成されます。

理想的には TreeView と同様の外観と操作を行う必要がありますが、Expander は UI を通じて広く使用されているため、一貫性を保つためにこれに固執したいと考えています。

私はWPFを初めて使用し、以前に基本的なデータバインディングを少し行ったことがありますが、このネストされた関係の性質により、これを理解するのが非常に難しくなっています

4

1 に答える 1

1

まず、ObservableDictionary が Key プロパティと Value プロパティを持つ項目のコレクションであると仮定します。あなたが望むことは、データ テンプレートを使用して wpf で実行できます。このコードを参照して、この方法で実行してみてください。

<ListBox ItemsSource="{Binding ObservableColoServerStatus}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Expander Header="{Binding Key}">
                    <ListBox ItemsSource="{Binding Value}">
                        <ListBox.ItemTemplate>
                            <DataTemplate>
                                <StackPanel Orientation="Horizontal">
                                    <TextBlock Text="{Binding Key}"/>
                                    <TextBlock Text="{Binding Value}"/>
                                </StackPanel>
                            </DataTemplate>
                        </ListBox.ItemTemplate>
                    </ListBox>
                </Expander>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

これはリスト ボックスであり、ItemsSource として ObservableDictionary を持ち、アイテム テンプレート プロパティで、すべてのアイテムを表すために使用するテンプレートを設定します。この場合、最初のディクショナリの値から要素を取得するリスト ボックスのキーをヘッダーに持ち、テンプレートを再度設定したエキスパンダーです。似ています。それがあなたのために働くことを願っています...

于 2012-10-11T20:08:58.573 に答える