Maison > développement back-end > C++ > Comment lier correctement une ComboBox WPF à une liste personnalisée et résoudre les problèmes de DataContext ?

Comment lier correctement une ComboBox WPF à une liste personnalisée et résoudre les problèmes de DataContext ?

Linda Hamilton
Libérer: 2025-01-23 23:57:11
original
517 Les gens l'ont consulté

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

Liaison WPF ComboBox avec liste personnalisée : compréhension de la hiérarchie de liaison

Dans la liaison de données WPF, les éléments enfants d'un DataTemplate héritent du DataContext de leur élément parent. Cela signifie qu'un ComboBox à l'intérieur d'un DataTemplate aura automatiquement son DataContext défini sur l'objet ViewModel sous-jacent représenté par le DataTemplate.

Problème de liaison de données

Dans l'exemple de code fourni, le ComboBox ne met pas à jour la liaison SelectedItem/SelectedValue car le DataContext n'est pas défini correctement. Ce problème peut être résolu en définissant explicitement le DataContext dans le fichier code-behind de MainWindow.

<code class="language-csharp">public partial class Window1
{
    public Window1()
    {
        InitializeComponent();
        DataContext = new MainWindowViewModel();
    }
}</code>
Copier après la connexion

Configuration de liaison correcte

Après avoir défini le DataContext, la configuration de liaison du ComboBox devrait ressembler à ceci :

<code class="language-xml"><ComboBox ItemsSource="{Binding Path=PhonebookEntries}"
          DisplayMemberPath="Name"
          SelectedValuePath="Name"
          SelectedValue="{Binding Path=PhonebookEntry}" /></code>
Copier après la connexion
  • ItemsSource : Spécifie la collection d'éléments à afficher dans la ComboBox.
  • DisplayMemberPath : Spécifie les propriétés de chaque élément à afficher dans la liste.
  • SelectedValuePath : Spécifie les propriétés de chaque élément à utiliser comme valeur.
  • SelectedValue : Spécifie la propriété ViewModel représentant l'élément sélectionné.

Modification : problème de liaison de données à l'aide de CollectionView

Si vous utilisez la propriété CollectionView pour PhonebookEntries, il est recommandé d'utiliser une classe dérivée. En effet, l'utilisation de CollectionView entraîne directement des inefficacités et des erreurs potentielles. En utilisant des classes dérivées, vous pouvez implémenter des fonctionnalités avancées tout en évitant les problèmes connus.

Utilisez ToString() dans le contenu de la liste déroulante

Pour éviter d'éventuels problèmes de liaison, vous pouvez utiliser ToString() au lieu de DisplayMemberPath pour afficher le contenu de la liste déroulante. ToString() représente la représentation sous forme de chaîne de chaque élément et DisplayMemberPath spécifie le membre utilisé pour sélectionner et afficher l'élément.

<code class="language-xml"><ComboBox ItemsSource="{Binding Path=PhonebookEntries}"
          SelectedValuePath="Name"
          SelectedValue="{Binding Path=PhonebookEntry}" /></code>
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal