2009-09-05 11 views
40

Comment lier une propriété de modèle d'affichage à la propriété ListBox.SelectedItem?MVVM: liaison à ListBox.SelectedItem?

J'ai créé une démo MVVM simple pour essayer de comprendre celle-ci. Mon modèle d'affichage possède 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 souhaite 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: Le modèle de vue propriété SelectedItem est pas mis à jour lorsque je change la sélection dans la zone de liste.

J'ai effectué un test dans lequel j'ai temporairement remplacé la propriété SelectedItem du modèle de vue par une propriété SelectedIndex et je l'ai liée à la propriété ListBox.SelectedIndex. Cette propriété a été mise à jour correctement - c'est simplement la propriété SelectedItem que je ne peux pas utiliser.

Alors, comment réparer la liaison SelectedItem? Merci de votre aide.

+4

Un bon exemple d'utilisation d'une zone de liste dans MVVM. Merci – MrPurpleStreak

Répondre

45

Eh bien, il est là, grand 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 vraiment - j'ai résolu le problème en début d'après-midi, puis j'ai passé le reste de l'après-midi et toute la soirée à récurer le web avant de remarquer l'erreur d'orthographe. Ma femme m'a dit à 3h00 cet après-midi: «Vous savez, ça va être quelque chose de petit." Et il l'a fait - une lettre manquante "je". Au moins, je peux aller me coucher maintenant.

+50

Pour vous aider à trouver ces problèmes plus tôt, si vous déboguez votre application, vous devriez voir une erreur de liaison WPF dans la fenêtre Sortie de Visual Studio, indiquant que la propriété "Selectedtem" n'existe pas. J'espère que cela vous aidera à repérer ce genre d'erreur plus rapidement dans le futur. – Andy

+1

Je voudrais savoir les erreurs de liaison dans la fenêtre de sortie il y a un an quand j'ai commencé le développement de Silverlight. Juste quand vous commencez à penser que vous êtes un développeur décent ... – BoxerBucks

+0

@BoxerBucks, je ne pense pas que vous obtenez ** notifications ** ou des journaux pour les liaisons échouées dans SilverLight. – Sam

Questions connexes