2013-05-07 6 views
5

Ich habe die folgende Datenvorlage (und eine entsprechende Ansicht Modell, nicht dargestellt):Kann nicht klar ListBox Auswahl mit SelectedItem = null - MVVM

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

Itemssource auf eine Liste von Snapshots gebunden ist, gefunden innen das Ansichtsmodell. Mein Ziel ist es, das SelectedItem zu löschen, sodass das Listenfeld in den ursprünglichen, nicht ausgewählten Zustand zurückkehrt. Das Ansichtsmodell implementiert IPropertyNotified.

Ich habe in der XAML eine Bindung wie so:

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

Nach Ansicht Modell, habe ich SelectedSnapshot = null, aber nichts passiert, obwohl RaisePropertyChanged auf dem Grundstück genannt wurde.

Ich habe es erneut mit SelectedIndex anstelle von SelectedItem versucht. Immer noch kein Glück.

Ich habe endlich die Lösung gefunden, die ich im Folgenden detailliert werde.

Antwort

10

Forget SelectedItem und SelectedIndex. Die Antwort lautet SelectedValue, zusammen mit IsSynchronizedWithCurrentItem = "True".

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

Dann, als ich ResetSelection() in dem View-Modell nennen, SelectedSnapshotValue auf null gesetzt wird,

void ResetSelection() 
{ 
    SelectedSnapshotValue = null; 
} 

, das die Bindung in der Datenvorlage aktualisiert, die gebundene Eigenschaft mit:

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

Dies ist die einzige Möglichkeit, meine Listbox zum Zurücksetzen der Auswahl zu bekommen.