WPFのコンボボックスコントロールは、カスタムオブジェクトリストから値を表示および選択する機能など、柔軟なデータバインディングオプションを提供します。このガイドでは、コンボボックスをWPFのカスタムリストにバインドする方法を調査し、一般的な問題を解決します。
コンボボックスをカスタムリストにバインドするには、リストデータ構造を表すクラスが必要です。たとえば、電話帳エントリのリストがある場合は、名前や番号などのプロパティを含む電話bookentryクラスを定義できます。
次に、電話bookentryオブジェクトのコレクションを公開するConnectionViewModelを作成します。このビューモデルは、コンボボックスのデータソースとして機能します。
xamlで、コンボボックスのアイテムソースプロパティをビューモデルの電話bookentriesプロパティにバインドします。さらに、DisplayMemberPathプロパティを設定して、ドロップダウンリストに表示するプロパティを指定し、SelectedValuePathプロパティを選択して、SelectedValueプロパティを設定するアイテムを選択するときに使用するプロパティを示します。
結合はデフォルトで双方向であり、UIまたはビューモデルで行われた変更が両側に伝播することを可能にします。ただし、場合によっては、UIで変更が発生したときにビューモデルを更新するだけの場合、一方向のバインディングを指定することをお勧めします。
comboboxのdatacontextは、カスタムリストを提供するConnectionViewModelインスタンスである必要があります。 DataContextが明示的に設定されていない場合、WPFは周囲の要素と結合階層に基づいて推測しようとします。
アイテムコントロールまたはアイテムパネルを介してコンボボックスにアイテムを追加すると、デフォルトで親要素のデータコンテキストを継承します。これは、itemsControl内のコンボボックス内の各アイテムのデータコンテキストが、項目コントロール自体のデータコンテキストと同じであることを意味します。
ConnectionViewModelの電話bookentriesプロパティがCollectionViewである場合、双方向の拘束力のある問題に遭遇する可能性があります。これを解決するには、プロパティタイプをReadOnlyCollectionに変更するか、カスタムicollectionView Derivedクラスを実装することを検討してください。
場合によっては、displaymemberpathの代わりにカスタムクラスのtoString()メソッドを使用することをお勧めします。これにより、選択した値を保存するためにSelectedValueプロパティを使用しながら、ドロップダウンリストに表示されるテキストをより強く制御できます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3