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>
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>
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>
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!