2013-05-07 17 views
5

Ho il seguente modello dati (ed un corrispondente modello di vista, non mostrato):selezione ListBox chiara utilizzando SelectedItem = null - MVVM

<DataTemplate DataType="{x:Type logic:SnapshotListViewModel}"> 
    <ListBox ItemsSource="{Binding Snapshots}" /> 
</DataTemplate> 

ItemsSource è associato a un elenco delle istantanee, si trova all'interno il viewmodel. Il mio obiettivo è di cancellare l'oggetto SelectedItem, quindi la casella di riepilogo torna allo stato iniziale non selezionato. Il modello di vista implementa IPropertyNotified.

ho aggiunto un legante nella XAML modo:

<ListBox SelectedItem={Binding SelectedSnapshot} .... /> 

Nel modello vista, ho impostato SelectedSnapshot = null, ma non succede nulla, anche se RaisePropertyChanged stato chiamato sulla proprietà.

Ho provato di nuovo con SelectedIndex invece di SelectedItem. Ancora senza fortuna.

Ho finalmente trovato la soluzione, che illustrerò di seguito.

risposta

10

Elimina SelectedItem e SelectedIndex. La risposta è SelectedValue, insieme a IsSynchronizedWithCurrentItem = "True".

<ListBox IsSynchronizedWithCurrentItem="True" 
     SelectedValue="{Binding SelectedSnapshotValue}" .../> 

Poi, quando chiamo ResetSelection() nel modello di visualizzazione, SelectedSnapshotValue è impostato su null,

void ResetSelection() 
{ 
    SelectedSnapshotValue = null; 
} 

che aggiorna il legame nel modello dei dati, utilizzando la proprietà vincolata:

private SnapshotViewModel selectedSnapshotValue; 
    public SnapshotViewModel SelectedSnapshotValue 
    { 
     get { return selectedSnapshotValue; } 
     set 
     { 
      if (selectedSnapshotValue != value) 
      { 
       selectedSnapshotValue = value; 
       RaisePropertyChanged("SelectedSnapshotValue"); 
      } 
     } 
    } 

Questo è l'unico modo in cui sono riuscito a ripristinare la selezione.