2009-09-05 15 views
40

Come si associa una proprietà del modello di visualizzazione alla proprietà ListBox.SelectedItem?MVVM: associazione a ListBox.SelectedItem?

Ho creato una semplice demo MVVM per provare a capirlo. Il mio modello di visualizzazione ha queste proprietà:

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"); 
    } 
} 

Voglio associare la proprietà SelectedItem all'elemento selezionato nella casella di riepilogo. Ecco il codice XAML per la casella di riepilogo:

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

Ecco il mio problema: la proprietà SelectedItem vista del modello non viene aggiornato quando cambio la selezione nella casella di riepilogo.

Ho eseguito un test in cui ho temporaneamente sostituito la proprietà SelectedItem del modello di visualizzazione con una proprietà SelectedIndex e l'ho associata alla proprietà ListBox.SelectedIndex. Quella proprietà aggiornata bene - è solo la proprietà SelectedItem che non riesco a far funzionare.

Quindi, come posso correggere il binding SelectedItem? Grazie per l'aiuto.

+4

Un buon esempio di come utilizzare una casella di riepilogo in MVVM. Grazie – MrPurpleStreak

risposta

45

Bene, eccolo, grande come la vita. Nel XAML. Sto vincolando ad una proprietà del modello di vista "Selectedtem". Sfortunatamente, il nome attuale è "SelectedItem". Quindi questo codice funziona davvero - ho risolto il problema all'inizio di questo pomeriggio e poi ho passato il resto del pomeriggio e tutta la sera a perlustrare il web, prima di notare l'errore di ortografia.

Mia moglie mi ha detto alle 3:00 di questo pomeriggio, "Sai, si rivelerà essere qualcosa di piccolo." E così è stato - una lettera mancante "I". Bene, almeno posso andare a letto ora.

+50

Per aiutarti a trovare questi problemi prima, se esegui il debug della tua app dovresti vedere un errore di binding WPF nella finestra Output di Visual Studio, indicando che la proprietà "Selectedtem" non esiste. Speriamo che questo ti aiuti a rintracciare questo tipo di errore più velocemente in futuro. – Andy

+1

Vorrei sapere gli errori di associazione nella finestra di output un anno fa quando ho avviato lo sviluppo di Silverlight. Proprio quando inizi a pensare di essere uno sviluppatore decente ... – BoxerBucks

+0

@BoxerBucks, non penso che tu possa ottenere ** qualsiasi ** notifica o log per i binding falliti in SilverLight. – Sam