web-dev-qa-db-fra.com

MVVM: liaison à ListBox.SelectedItem?

Comment lier une propriété de modèle de vue à la propriété ListBox.SelectedItem?

J'ai créé une démo MVVM simple pour essayer de comprendre celle-ci. Mon modèle de vue a les propriétés suivantes:

private ObservableCollection<DisneyCharacter> p_DisneyCharacters;
public ObservableCollection<DisneyCharacter> DisneyCharacters
{
    get { return p_DisneyCharacters; }

    set
    {
        p_DisneyCharacters = value;
        base.FirePropertyChangedEvent("DisneyCharacters");
    }
}

private DisneyCharacter p_SelectedItem;
public DisneyCharacter SelectedItem
{
    get { return p_SelectedItem; }

    set
    {
        p_SelectedItem = value;
        base.FirePropertyChangedEvent("SelectedItem");
    }
}

Je veux lier la propriété SelectedItem à l'élément sélectionné dans la zone de liste. Voici le XAML pour la zone de liste:

<ListBox ItemTemplate="{StaticResource MasterTemplate}"
         ItemsSource="{Binding Path=DisneyCharacters}" 
         SelectedItem="{Binding Path=Selectedtem, Mode=TwoWay}" 
         HorizontalAlignment="Stretch" />

Voici mon problème: La propriété SelectedItem du modèle de vue n'est pas mise à jour lorsque je modifie la sélection dans la zone de liste.

J'ai fait un test où j'ai temporairement remplacé la propriété SelectedItem du modèle de vue par une propriété SelectedIndex, et je l'ai lié à la propriété ListBox.SelectedIndex. Cette propriété a bien été mise à jour - c'est juste la propriété SelectedItem que je ne peux pas travailler.

Alors, comment puis-je corriger la liaison SelectedItem? Merci de votre aide.

40
David Veeneman

Eh bien, ça y est, gros comme la vie. Dans le XAML. Je lie à une propriété de modèle de vue "Selectedtem". Malheureusement, le nom réel est "SelectedItem". Donc, ce code fonctionne réellement - j'ai résolu le problème tôt cet après-midi, puis j'ai passé le reste de l'après-midi et toute la soirée à parcourir le Web, avant de remarquer l'erreur d'orthographe.

Mon épouse m'a dit à 15 h 00 cet après-midi: "Vous savez, ça va devenir quelque chose de petit." Et il en fut ainsi - une lettre manquante "je". Eh bien, au moins je peux aller me coucher maintenant.

47
David Veeneman