这是我的 ComboBox
的实例化,在XAML
<Combobox ItemsSource="{Binding Path=Delimiters}" DisplayMemberPath="Key"
SelectedValue="{Binding Path=SelectedDelimiter, UpdateSourceTrigger=PropertyChanged}" />
下面是视图模型中对应的绑定与 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");
}
}
}
我在绑定选定的值时遇到了麻烦。我的 Dictionary
正在被绑定,而当我对UI进行修改时,我就会发现 ComboBox
,该设置被正确地启动。在if语句中检查是否是非法定界符,它确实在后面的代码中把所选的值设置为原始值,但它没有填充到 ComboBox
UI(我看到get accessor从UI中发射)。它就像设置 SelectedValue
不真正做任何事情的用户界面。
如果有人能指点我正确的方向?
你应该设置 SelectedValuePath
如果你要使用 SelectedValue
,大概是为了 Value
. SelectedValue
是在做一个 "选择",所以你的属性类型也应该是不同的。
如果你想保留整个 KeyValuePair
你应该捆绑 SelectedItem
来代替。
花了点时间才弄明白,我的设置是正确的,但由于我在设置器中更新的是同一个属性,所以我需要使用调度器创建一个新的线程来正确地进行更新。