WPF ComboBox とカスタム リスト: バインディングの課題と解決策
WPF ComboBox をカスタム リストにバインドするには、DisplayMemberPath
と SelectedValuePath
を使用してデータの表示方法と選択方法を制御する必要があります。 ただし、よくある問題は、SelectedItem
/SelectedValue
が正しく更新されないことです。 これは多くの場合、DataContext
が不適切に設定されていることが原因で発生します。
DataContext の問題
DataContext
は、特定の要素内のデータ バインディングにどのオブジェクトのプロパティが使用されるかを指定します。 ComboBox に正しく設定することを忘れると、バインディングの問題が発生することがよくあります。
解決策: DataContext の設定
これを修正するには、コンボボックスの DataContext
が、バインドしているプロパティ (SelectedValue
または SelectedItem
) を含むオブジェクトを指していることを確認します。 例:
<code class="language-xml"><ComboBox DataContext="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}}}" DisplayMemberPath="Name" ItemsSource="{Binding Path=PhonebookEntries}" SelectedValue="{Binding Path=PhonebookEntry}" SelectedValuePath="Name"> </ComboBox></code>
これにより、ComboBox が Window
の DataContext
(通常は ViewModel) にバインドされ、ViewModel のプロパティへのアクセスが保証されます。
重要な考慮事項:
DisplayMemberPath
と SelectedValuePath
(この場合は「Name」) の両方に一致するパブリック プロパティが必要です。CollectionView
を直接使用するとバインドの問題が発生する可能性があります。 派生クラスをお勧めします。 この制限は .NET 4.6 以降にはありません。成功したバインディング: 概要
DataContext
を正しく設定し、適切な DisplayMemberPath
および SelectedValuePath
値を使用し、カスタム リストのプロパティを確認することで、WPF ComboBox をカスタム データに確実にバインドできます。
以上がカスタム リストにバインドすると WPF ComboBox SelectedItem/SelectedValue が更新されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。