Je rencontre un problème dans UWP en utilisant MVVM, où j'ai un Combobox
avec ItemsSource
lié à une collection d'éléments dans mon ViewModel, et aussi dans ma VM est un élément de cette collection que SelectedItem
est lié à.Uwp Combobox Rupture de liaison sur le changement de source
Je dois changer à la fois la source des éléments et l'élément sélectionné à volonté dans mon modèle de vue. Le problème est, si le SelectedItem
n'existe pas dans le ItemsSource
à tout moment, la liaison pour SelectedItem
semble rompre définitivement.
Exemple: Disons que j'ai un Comobox qui est lié à ma VM:
<ComoboBox ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}" />
Maintenant, dans mon ViewModel, j'ai:
public List<string> Items { get; set; } // Pretend these properties call on OnPropertyChanged
public string SelectedItem { get; set; }
public void Initialize() {
Items = new List<string> { "A", "B", "C", "D" };
SelectedItem = "B";
}
public void ChangeList() {
// This breaks the binding that the Combobox has with SelectedItem
Items = new List<string> { "E", "F", "G", "H" };
// This does nothing on the XAML side as the binding is already broken by this poing
SelectedItem = "H";
}
Lorsque initialisé, l'application affiche " B "dans la zone de liste déroulante sélectionnée. Si dans le code, disons, je le change en "A", cela reflétera aussi un changement dans la vue. Cependant, quand j'appelle ChangeList()
la zone de liste déroulante sera définie à vide et ignorera toutes les modifications que je fais dans le code derrière.
Malheureusement, dans mon cas, la mise en SelectedItem
à null avant de mettre à jour la liste des sources ne résout pas mon problème.
Comment procéder pour changer la source et l'élément sélectionné dans la machine virtuelle?
Je suis d'accord que cela devrait fonctionner comme ça. J'ai observé que 'SelectedItem' est défini sur' null' quand je mets le mode de liaison à 'TwoWay', mais après que la liaison semble rester brisée. Changer l'élément dans le modèle de données ne déclenche plus un 'get' sur la liste déroulante et rien n'est sélectionné. –