Tim*_*Tim 3 c# wpf binding combobox selectedvalue
这是我ComboBox在 XAML 中实例化的
<Combobox ItemsSource="{Binding Path=Delimiters}" DisplayMemberPath="Key"
SelectedValue="{Binding Path=SelectedDelimiter, UpdateSourceTrigger=PropertyChanged}" />
Run Code Online (Sandbox Code Playgroud)
以下是视图模型中相应的绑定,并Dictionary在构造函数中填充:
private IDictionary<string,string> _delimiters;
public IDictionary<string,string> Delimiters
{
get{return _delimiters;}
set{_delimiters = value; RaisePropertyChanged("Delimiters");}
}
private KeyValuePair <string, string> _selectedDelimiter;
public KeyValuePair <string, string> SelectedDelimiter
{
get{return _selectedDelimiter;}
set{
if(value.Key != _selectedDelimiter.Key || value.Value != _selectedDelimiter.Value)
{
var prevDelimiter = _selectedDelimiter;
_selectedDelimiter = value;
if(IllegalDelimiter.Contains(_selectedDelimiter)
{
MessageBox.Show("errror", "error");
_selectedDelmiter = prevDelimiter;
}
RaisePropertyChanged("SelectedDelimiter");
}
}
}
Run Code Online (Sandbox Code Playgroud)
我在绑定所选值时遇到问题。正在Dictionary绑定,当我对 UI 进行更改时ComboBox,该设置被正确触发。在 if 语句中检查其是否为非法分隔符,它确实将所选值设置回其后面代码中的原始值,但它不会填充到 UI ComboBox(我看到 get 访问器从 UI 触发)。它的类似设置SelectedValue实际上对 UI 没有任何作用。
如果有人能指出我正确的方向吗?
您应该设置SelectedValuePath是否要使用SelectedValue,大概是Value。SelectedValue正在进行“选择”,因此您的财产类型也应该不同。
如果你想保留整个,KeyValuePair你应该绑定SelectedItem。