Я использую WPF с привязкой данных. У меня есть Combobox, связанный со списком строк. Я хочу, чтобы выбранный элемент в списке устанавливал поле в моей модели просмотра. Однако иногда я хочу отменить выбор пользователя и заново установить выбранное значение в комбинированном списке, но, похоже, я не могу этого сделать.
Вот код модели View:
public class SettingsViewModel : INotifyPropertyChanged
{
public enum RateTypes
{
[Description("128Hz")]
Hz128 = 4,
[Description("256Hz")]
Hz256 = 6,
[Description("400Hz")]
Hz400 = 7,
[Description("512Hz")]
Hz512 = 8,
[Description("600Hz")]
Hz600 = 9
}
RateTypes m_SelectedRate;
List<string> RateOptions = ((RateTypes [])Enum.GetValues(typeof(RateTypes)))
.Select(o => o.Description())
.ToList();
public string SelectedRate
{
get {return m_SelectedRate.Description();}
set
{
if (value == RateType.Hz256)
{
MessageBox.Show("256Hz not an option with your system");
m_SelectedRate= IMURate.Hz400;
}
else
{
m_SelectedRate = value;
}
OnPropertyChanged(nameof(SelectedRate));
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyChanged)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
var e = new PropertyChangedEventArgs(propertyChanged);
handler(this, e);
}
}
}
и XAML имеет:
<ComboBox Grid.SelectedItem="{Binding SelectedRate, Mode=TwoWay}" ItemsSource="{Binding RateOptions}">
Однако, когда я выбираю 256 Гц в графическом интерфейсе, отображаемое значение остается равным 256 Гц, а не меняется на 400 Гц. Если я вызываю OnPropertyChanged(SelectedRate)
из отдельной функции, значение меняется.
Я пытался использовать SelectedValue
и UpdateSourceTrigger
, но не могу найти ничего, что работает.
Есть идеи?