2013-05-07 21 views
5

Mam następujący szablon danych (i odpowiedni widok modelu, nie pokazano):nie można wyczyścić wybór ListBox użyciu SelectedItem = null - MVVM

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

ItemsSource jest związany z listą migawek znaleźć wewnątrz model widoku. Moim celem jest wyczyszczenie SelectedItem, więc listbox powraca do początkowego, niezaznaczonego stanu. Model widoku implementuje IPropertyNotified.

dodałem wiążący w XAML tak:

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

W modelu widoku ustawić SelectedSnapshot = null, ale nic się nie dzieje, chociaż RaisePropertyChanged padł na miejscu.

Próbowałem ponownie z SelectedIndex zamiast SelectedItem. Wciąż nie ma szczęścia.

W końcu znalazłem rozwiązanie, które opiszę poniżej.

Odpowiedz

10

Zapomnij SelectedItem i SelectedIndex. Odpowiedź brzmi: Wybrana wartość:, wraz z IsSynchronizedWithCurrentItem = "True".

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

Wtedy, gdy zgłoszę ResetSelection() w modelu widoku SelectedSnapshotValue jest ustawiona na null,

void ResetSelection() 
{ 
    SelectedSnapshotValue = null; 
} 

który aktualizuje wiązania w szablonie danych, używając związany właściwość:

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

To jedyny sposób, w jaki udało mi się uzyskać mój listbox, aby zresetować wybór.

Powiązane problemy