C# 将Combobox与Dictionary对象绑定,但在代码隐藏中设置选定值无效
这是我在XAML中实例化的C# 将Combobox与Dictionary对象绑定,但在代码隐藏中设置选定值无效,c#,wpf,combobox,binding,selectedvalue,C#,Wpf,Combobox,Binding,Selectedvalue,这是我在XAML中实例化的组合框 <Combobox ItemsSource="{Binding Path=Delimiters}" DisplayMemberPath="Key" SelectedValue="{Binding Path=SelectedDelimiter, UpdateSourceTrigger=PropertyChanged}" /> 我在绑定所选值时遇到问题。字典正在绑定,当我更改UI组合框时,设置被正确触发。在检查其是否为非法分隔符的i
组合框
<Combobox ItemsSource="{Binding Path=Delimiters}" DisplayMemberPath="Key"
SelectedValue="{Binding Path=SelectedDelimiter, UpdateSourceTrigger=PropertyChanged}" />
我在绑定所选值时遇到问题。字典
正在绑定,当我更改UI组合框
时,设置被正确触发。在检查其是否为非法分隔符的if语句中,它确实会将所选值设置回代码隐藏中的原始值,但不会填充到组合框
UI(我看到get访问器从UI中启动)。它就像设置SelectedValue
对用户界面没有任何作用
如果有人能给我指出正确的方向?如果要使用SelectedValue
,您应该将SelectedValuePath设置为Value
SelectedValue
正在进行“选择”,因此您的属性类型也应该不同
如果要保留整个KeyValuePair
则应绑定SelectedItem
。花了一段时间才弄清楚,我的设置是正确的,但因为我正在更新setter中的相同属性,我需要使用dispatcher创建一个新线程来正确执行更新。我以前将SelectValuePath=Value
和我的SelectedDelimiter作为字符,但当我试图更改它时,它会导致相同的行为。。我也尝试过用KvP绑定SelectedItem,但没有任何更改。@Tim:您真的在代码中设置了属性吗?如果您设置该字段,绑定将永远不会更新,因为不会引发任何通知。我面临着类似的问题。。如果您还记得,您能告诉我“更新setter中的相同属性”是什么意思吗??
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");
}
}
}