0

私のアプリケーションでは、ItemTemplate にデータ テンプレートを含むリスト ボックスがあり、いくつかのテキスト ブロックとチェック ボックスがあります。このアプリを使用して、Excel シートを読み込み、その内容を読み取り、リスト ボックスに項目を追加します (目的は、説明用のテキスト ブロックとイベント用のチェック ボックスを作成することです)。

私の最初のアイデアは、DataGrid を使用することでしたが、シートを読んでいるときに、チェック ボックスのイベント (CB ごとに 1 つのイベント) を作成する必要がありますが、DataGrid ではできませんでした。次に、ItemTemplate のデータ テンプレートを使用して、リスト ボックス オプションに移動しました。しかし、ContentPresenter を使用しているときに「null」の問題オブジェクトに行き詰まりました (私が読んだことから、リスト ボックスの項目が「準備ができていない」ため、WPF のバグです)。

それで、これを「自動化」する別の方法はありますか?または、各テキスト ブロックとチェック ボックスを作成する必要がありますか。

ありがとう !(下手な英語でごめんなさい)

4

1 に答える 1

1

これを実装する正統な方法は、表示する各アイテムを表すビュー モデル オブジェクトを構築することです。このビュー モデルには、データを保持するためのブール プロパティと文字列プロパティが含まれている可能性があります。Excel シートを解析するときに、エントリごとにビュー モデルのインスタンスを作成し、データをそこに入れ、それをリストに追加します。

すべての Excel データを読み取った後、データのプレゼンテーションの実装に取り​​かかることができます。まず、ビュー モデル オブジェクトの DataTemplate を宣言します。この DataTemplate で、チェックボックスを bool にバインドし、textblock/label を文字列にバインドします。次に、 を宣言し、ListBoxビュー モデル リスト インスタンスを にバインドしますListBox.ItemsSource。すべてを正しく行った場合、各行にチェックボックスと説明が含まれるリストボックスが表示されます。

注: ユーザーがビュー モデルのデータを変更できるようにする場合は、必ずビュー モデル オブジェクトにINotifyPropertyChangedを実装し、DataTemplate で TwoWay バインディングを使用してください。

于 2012-04-18T19:48:01.723 に答える