【发布时间】:2018-05-14 13:05:31
【问题描述】:
我正在使用带有数据绑定的 WPF。我有一个绑定到字符串列表的组合框。我希望列表中的选定项目在我的视图模型中设置一个字段。但是,有时我想覆盖用户的选择并重新设置组合框中的选定值,但我似乎无法做到这一点。
这是视图模型代码:
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}">
但是,当我在 GUI 中选择 256Hz 时,显示的值将保持为 256Hz,而不是更改为 400Hz。如果我从一个单独的函数中调用OnPropertyChanged(SelectedRate),该值确实会改变。
我尝试过使用SelectedValue 和UpdateSourceTrigger,但找不到任何可行的方法。
有什么想法吗?
【问题讨论】:
标签: xaml combobox selecteditem 2-way-object-databinding