WPF の ComboBox コントロールは、カスタム オブジェクト リストから値を表示および選択する機能など、柔軟なデータ バインディング オプションを提供します。このガイドでは、WPF で ComboBox をカスタム リストにバインドする方法を説明し、一般的な問題を解決します。
ComboBox をカスタム リストにバインドするには、リスト データ構造を表すクラスが必要です。たとえば、電話帳エントリのリストがある場合、名前や番号などのプロパティを含む PhoneBookEntry クラスを定義できます。
次に、PhoneBookEntry オブジェクトのコレクションを公開する ConnectionViewModel を作成します。このビュー モデルは、ComboBox のデータ ソースとして機能します。
XAML で、ComboBox の ItemsSource プロパティを View Model の PhonebookEntries プロパティにバインドします。さらに、DisplayMemberPath プロパティを設定してドロップダウン リストに表示するプロパティを指定し、SelectedValuePath プロパティを設定して項目を選択して SelectedValue プロパティを設定するときにどのプロパティを使用するかを指定します。
デフォルトでは、バインディングは双方向であり、UI またはビューモデルで行われた変更が両方の当事者に反映されます。ただし、UI で変更が発生したときにのみ View Model を更新したい場合など、一方向バインディングを指定したい状況もあります。
ComboBox の DataContext は、カスタム リストを提供する ConnectionViewModel インスタンスである必要があります。 DataContext が明示的に設定されていない場合、WPF は周囲の要素とバインディング階層に基づいて DataContext を推論しようとします。
ItemsControl または ItemsPanel 経由で項目が ComboBox に追加されると、それらの項目はデフォルトで親要素の DataContext を継承します。これは、ItemsControl 内の ComboBox 内の各項目の DataContext が、ItemsControl 自体の DataContext と同じであることを意味します。
ConnectionViewModel の PhonebookEntries プロパティが CollectionView の場合、双方向バインディングの問題が発生する可能性があります。この問題を解決するには、プロパティの種類を ReadOnlyCollection に変更するか、カスタム ICollectionView 派生クラスを実装することを検討してください。
場合によっては、DisplayMemberPath の代わりにカスタム クラスの ToString() メソッドを使用した方がよい場合があります。これにより、SelectedValue プロパティを使用して選択した値を保存しながら、ドロップダウン リストに表示されるテキストをより詳細に制御できるようになります。
以上がWPF ComboBox をカスタム リストにバインドするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。