У меня есть WPF ComboBox, и я использую MVVM для привязки свойств ItemsSource и SelectedItem. В основном то, что я хочу сделать, - это когда пользователь выбирает определенный элемент в поле со списком, поле со списком вместо этого выбирает другой элемент.
<ComboBox ItemsSource="{Binding TestComboItemsSource}" SelectedItem="{Binding TestComboItemsSourceSelected}"></ComboBox>
В демонстрационных целях у меня также есть кнопка для обновления SelectedItem.
<Button Command="{Binding DoStuffCommand}">Do stuff</Button>
У меня это в моей viewModel:
public ObservableCollection<string> TestComboItemsSource { get; private set; }
public MyConstructor()
{
TestComboItemsSource = new ObservableCollection<string>(new []{ "items", "all", "umbrella", "watch", "coat" });
}
private string _testComboItemsSourceSelected;
public string TestComboItemsSourceSelected
{
get { return _testComboItemsSourceSelected; }
set
{
if (value == "all")
{
TestComboItemsSourceSelected = "items";
return;
}
_testComboItemsSourceSelected = value;
PropertyChanged(this, new PropertyChangedEventArgs(TestComboItemsSourceSelected))
}
}
private ICommand _doStuffCommand;
public ICommand DoStuffCommand
{
get
{
return _doStuffCommand ?? (_doStuffCommand = new RelayCommand(p =>
{
TestComboItemsSourceSelected = "items";
})); }
}
Хорошо, поэтому я хочу, чтобы ComboBox выбирал элемент «элементы» всякий раз, когда пользователь выбирает элемент «все». Используя кнопку, я могу обновить SelectedItem поля со списком, и я вижу, как это отражается в пользовательском интерфейсе.
У меня есть аналогичная логика для обновления viewModel в моем установщике свойства TestComboItemsSourceSelected. Если пользователь выбирает «все», вместо этого установите для SelectedItem значение «items». Таким образом, с точки зрения кода свойство viewmodel изменяется, но по какой-то причине это не отражается в пользовательском интерфейсе. Я что-то упускаю? Есть ли какой-то побочный эффект от того, как я это реализовал?