12
votes

Comment définir un élément comme sélectionné dans une combinaison

Il semble que personne n'a encore trouvé un moyen de définir le ComboBoxItem comme sélectionné avec une sélection sélectionnée = "Propriété de liaison".

est la solution pour utiliser une propriété isselected dans l'objet viewModel dans les itemsSource Combobox?


0 commentaires

3 Réponses :


6
votes

Vous n'êtes pas sûr de savoir pourquoi vous ne pouvez pas se lier à la sélection de fichiers de sélection sur une combinaison sans voir votre code. Vous trouverez ci-dessous comment le faire à l'aide d'une collectionView qui dispose de la gestion actuelle de l'élément intégré dans lequel les comboblos sont supportant. CollectionView a une propriété actuelleItem Obtenir une propriété que vous pouvez utiliser pour être actuellement sélectionnée.

xaml: xxx

code derrière: xxx / p>


3 commentaires

«... Je ne sais pas pourquoi vous ne pouvez pas vous appeler des données sur SELECTELITEM sur une combinaison sans voir votre code ...« Faites un problème de Google facile. COLLECTIONView est en outre une surcharge totale dans mon cas, je ne peux plus et ne bottera pas mon observableCollection comme j'en ai besoin pour ajouter / del quelle collectionView n'est pas.


Une collectionView peut être une vue d'une observablecolection afin de donner à nouveau quelque chose. Que voulez-vous dire que CollectionView est une surcharge totale? Parlez-vous des autres fonctionnalités qu'une collectionView fournit à côté du courant, comme le filtrage, le regroupement et le tri? Je ne sais toujours pas quel est le problème contraignant SELECTELITEM sur une combinaison.


Je n'ai pas besoin d'une collectionView c'est-ce que c'est ;-) Si je veux trier c'est le travail du contrôle, dans mon cas, la DataGrid a cette fonctionnalité. CollectionView est okish pour une liste de liste qui ne clique pas sur l'en-tête de la colonne.



16
votes

Notre approche réussie pour la liaison d'une combinaison est la suivante ...

<ComboBox 
    ItemsSource="{Binding Path=AllItems}" 
    SelectedItem="{Binding Path=CurrentItem, Mode=TwoWay}" />
<TextBlock Text="{Binding Path=CurrentItem, Mode=TwoWay}" />

class public ItemListViewModel
{
    public ObservableCollection<Item> AllItems {get; set;}

    private Item _currentItem;
    public Item CurrentItem
    {
        get { return _currentItem; }
        set
        {
            if (_currentItem == value) return;
            _currentItem = value;
            RaisePropertyChanged("CurrentItem");
        }
    }
}


2 commentaires

C'est bizarre. Je pourrais jurer que j'ai fait exactement ce que vous avez suggéré avant parce que j'ai lu sur certains blogs ... maintenant j'ai essayé à nouveau et cela a fonctionné: P Entre-temps j'ai aidé avec cela si quelqu'un est intéressé xD // définir la nouvelle classe d'école créée Index sélectionné dans le contrôle de l'interface utilisateur. SchoolClasses.count - 1: 0;


Il suffit d'avoir ce problème. J'avais 2 collections séparées et j'ai oublié l'exploitant Equals, de sorte que la CurrentItem a été cueillie d'une autre collection que celle que j'ai liée à XAML. Donc, mettre en œuvre des égaux fixe le problème. Mais la sélection de la même collection a également fixé le problème



0
votes

Qu'est-ce que j'ai trouvé, c'est que sur Combobox Soure Code, SELECTEDITEM est défini à l'aide de la liste sélectionnée Combobox utilisant

public object SelectedItem {
        get {
            int index = SelectedIndex;
            return (index == -1) ? null : Items[index];
        }
        set {
            int x = -1;

            if (itemsCollection != null) {
                //bug (82115)
                if (value != null)
                    x = itemsCollection.IndexOf(value);
                else
                    SelectedIndex = -1;
            }

            if (x != -1) {
                SelectedIndex = x;
            }
        }
    }


0 commentaires