J'ai ce ListBox qui est lié à une ObservableCollection. Chaque objet dans la liste implémente une interface appelée ISelectableComment synchroniser l'élément SelectedItem d'un ListBox?
public interface ISelectable : INotifyPropertyChanged
{
event EventHandler IsSelected;
bool Selected { get; set; }
string DisplayText { get; }
}
Je veux garder une trace de l'objet sélectionné indépendamment de la façon dont il est sélectionné. L'utilisateur peut cliquer sur la représentation de l'objet dans le ListBox mais il se peut aussi qu'un objet soit sélectionné via le code. Si l'utilisateur sélectionne un objet via la ListBox, je transtype l'élément sélectionné en ISelectable et définit la propriété Selected sur true.
ISelectable selectable = (ISelectable)e.AddedItems[0];
selectable.Selected = true;
Mon problème est que lorsque je sélectionne l'objet en utilisant le code, je ne peux pas obtenir ListBox pour changer l'élément sélectionné. J'utilise un DataTemplate pour montrer l'objet sélectionné dans une couleur différente, ce qui signifie que tout est affiché correctement. Mais le ListBox a le dernier objet cliqué par l'utilisateur en tant que SelectedItem qui signifie que l'article ne peut pas être cliqué sans d'abord sélectionner un autre objet dans la liste.
Quelqu'un a eu une idée sur la façon de résoudre ce problème? Je suis sûr que je peux accomplir ce que je veux en écrivant du code personnalisé pour gérer les événements de la souris et du clavier, mais je préfère ne pas. J'ai essayé d'ajouter une propriété SelectedItem à la collection et la lier à SelectItemProperty de la ListBox mais pas de chance.
C'était exactement ce que je cherchais. Merci! –