WPF - MVVM - ComboBox SelectedItem
J'ai ViewModel
(mise en œuvre INotifyPropertyChanged
) en arrière-plan et de la classe Category
qui a seulement une propriété de type string
. Mon ComboBox SelectedItem est lié à une instance d'une Catégorie. Lorsque je change la valeur de l'exemple, SelectedItem n'est pas mis à jour et Combobox n'est pas modifié.
EDIT: code
Zone de liste déroulante:
<ComboBox x:Name="categoryComboBox" Grid.Column="1" Grid.Row="3" Grid.ColumnSpan="2"
Margin="10" ItemsSource="{Binding Categories}"
DisplayMemberPath="Name" SelectedValue="{Binding NodeCategory, Mode=TwoWay}"/>
Propriété:
private Category _NodeCategory;
public Category NodeCategory
{
get
{
return _NodeCategory;
}
set
{
_NodeCategory = value;
OnPropertyChanged("NodeCategory");
}
}
[Serializable]
public class Category : INotifyPropertyChanged
{
private string _Name;
[XmlAttribute("Name")]
public string Name
{
get
{
return _Name;
}
set
{
_Name = value;
OnPropertyChanged("Name");
}
}
public void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
[field:NonSerialized]
public event PropertyChangedEventHandler PropertyChanged;
}
et ce que je cherche est: lorsque j'ai mis
NodeCategory = some_list_of_other_objects.Category;
pour que cet élément sélectionné dans Combobox
appropriés DisplayMemberPath
source d'informationauteur Bip
Vous devez vous connecter pour publier un commentaire.
La catégorie que vous définissez dans cette ligne -
et celui présent dans vos Catégories de collecte(
ItemsSource="{Binding Categories}"
) doit être référence à un même objet. Si elles ne sont pas alorsSelectedItem
ne fonctionne pas.Solution 1 -
Vous pouvez également essayer d'utiliser
SelectedValuePath
comme celui -et dans le code, vous pouvez faire quelque chose comme cela -
et réglez l'élément sélectionné comme celui -
et utiliser la valeur sélectionnée comme celui -
ou
Solution de 2 -
Une autre solution possible peut -
de cette façon, votre NodeCategory propriété aura la référence d'un objet dans les Catégories de collecte et de
SelectedItem
fonctionne.Votre XAML besoin d'un couple de modifications, mais je pense que le vrai problème est avec le code que vous avez posté, qui je ne pense pas raconter toute l'histoire.
Pour commencer, votre zone de liste déroulante
ItemSource
est lié à une propriété appelée Catégories, mais vous ne montrez pas comment cette propriété est codé ou comment votreNodeCategory
propriété est initialement synchronisés avec l'élément.Essayez d'utiliser le code suivant et vous verrez que l'élément sélectionné est conservé dans de synchronisation lorsque l'utilisateur modifie la valeur dans la zone de liste déroulante.
XAML
Code-behind
De mon petit exemple:
Remarque: Ce paramètre est juste une chaîne de caractères (ou d'une catégorie sur une autre liste), mais les principes de base doit être la même ici:
Fondamentalement, c'est fait:
Voici mon code XAML:
et dans le ViewModel de la Fenêtre
Avec l'aide de cette petite classe:
Et de ce Point ViewModel