ホームページ > バックエンド開発 > C++ > WPF ComboBox をカスタム リストに正しくバインドし、DataContext の問題を解決する方法

WPF ComboBox をカスタム リストに正しくバインドし、DataContext の問題を解決する方法

Linda Hamilton
リリース: 2025-01-23 23:57:11
オリジナル
517 人が閲覧しました

How to Correctly Bind a WPF ComboBox to a Custom List and Resolve DataContext Issues?

カスタム リストを使用した WPF ComboBox バインディング: バインディング階層について

WPF データ バインディングでは、DataTemplate 内の子要素は親要素の DataContext を継承します。これは、DataTemplate 内の ComboBox の DataContext が、DataTemplate によって表される基になる ViewModel オブジェクトに自動的に設定されることを意味します。

データ バインディングの問題

提供されたコード例では、DataContext が正しく設定されていないため、ComboBox は SelectedItem/SelectedValue バインディングを更新しません。この問題は、MainWindow の分離コード ファイルで DataContext を明示的に設定することで解決できます。

<code class="language-csharp">public partial class Window1
{
    public Window1()
    {
        InitializeComponent();
        DataContext = new MainWindowViewModel();
    }
}</code>
ログイン後にコピー

バインディング構成を修正する

DataContext を設定した後、ComboBox のバインド構成は次のようになります。

<code class="language-xml"><ComboBox ItemsSource="{Binding Path=PhonebookEntries}"
          DisplayMemberPath="Name"
          SelectedValuePath="Name"
          SelectedValue="{Binding Path=PhonebookEntry}" /></code>
ログイン後にコピー
  • ItemsSource: ComboBox に表示される項目のコレクションを指定します。
  • DisplayMemberPath: リストに表示する各項目のプロパティを指定します。
  • SelectedValuePath: 値として使用される各項目のプロパティを指定します。
  • SelectedValue: 選択された項目を表す ViewModel プロパティを指定します。

修正: CollectionView を使用したデータ バインディングの問題

PhonebookEntries プロパティに CollectionView を使用する場合は、派生クラスを使用することをお勧めします。これは、CollectionView の使用が非効率性と潜在的なエラーに直接つながるためです。派生クラスを使用すると、既知の問題を回避しながら高度な機能を実装できます。

ドロップダウン リストのコンテンツで ToString() を使用する

潜在的なバインディングの問題を回避するには、DisplayMemberPath の代わりに ToString() を使用してドロップダウン コンテンツを表示します。 ToString() は各項目の文字列表現を表し、DisplayMemberPath は項目の選択と表示に使用されるメンバーを指定します。

<code class="language-xml"><ComboBox ItemsSource="{Binding Path=PhonebookEntries}"
          SelectedValuePath="Name"
          SelectedValue="{Binding Path=PhonebookEntry}" /></code>
ログイン後にコピー

以上がWPF ComboBox をカスタム リストに正しくバインドし、DataContext の問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート