Zresetuj combobox wybrany element na zestawie za pomocą MVVM
Korzystam z ComboBox w mojej aplikacji WPF i po MVVM. Istnieje lista ciągów, które chcę pokazać w moim ComboBoxie.
XAML:
<ComboBox ItemsSource="{Binding ItemsCollection}" SelectedItem="{Binding SelectedItem}" />
Wyświetl model:
public Collection<string> ItemsCollection; // Suppose this has 10 values.
private string _selectedItem;
public string SelectedItem
{
get { return _selectedItem; }
set
{
_selectedItem = value;
Trigger Notify of property changed.
}
}
Teraz ten kod działa całkowicie dobrze. Jestem w stanie wybrać z widoku i mogę uzyskać zmiany w ViewModel i jeśli zmienię SelectedItem z mojego ViewModel, widzę to w moim widoku.
Oto, co próbuję osiągnąć. Kiedy zmieniam wybrany element z mojego widoku, muszę sprawdzić, czy wartość jest dobra / zła (lub cokolwiek) ustawić wybrany element, inaczej go nie ustawiać. Więc moje zmiany modelu poglądów lubią to.
public string SelectedItem
{
get { return _selectedItem; }
set
{
if (SomeCondition(value))
_selectedItem = value; // Update selected item.
else
_selectedItem = _selectedItem; // Do not update selected item.
Trigger Notify of property changed.
}
}
Teraz, gdy wykonam ten kod, a SomeCondition (wartość) zwraca false, SelectedItem zwraca starą wartość ciągu, ale w moim widoku wybrana pozycja w ComboBox jest wartością, którą wybrałem. Załóżmy więc, że mam kolekcję 10 ciągów znaków wyświetlanych w moim ComboBoxie. Wszystkie wartości są dobre z wyjątkiem drugiego i czwartego elementu (SomeCondition zwraca false dla 2. i 4. wartości). Co chcę, jeśli wybiorę drugi lub czwarty wybrany element, nie zmieniaj. Ale mój kod nie działa prawidłowo. Jeśli wybiorę drugi element, widok nadal będzie wyświetlał drugi element, tak jak został wybrany. Wiem, że coś jest nie tak w moim kodzie. Ale co to jest?