2011-11-18 39 views
1
<Combobox ItemsSource="{Binding Path=Delimiters}" DisplayMemberPath="Key" 
SelectedValue="{Binding Path=SelectedDelimiter, UpdateSourceTrigger=PropertyChanged}" /> 

这是我的组合框在XAML与字典对象绑定组合框,但后面未生效

这里实例化与填充在构造字典视图模型对应的绑定在代码中设置选定值。

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"); 
     } 

    } 
} 

基本上我遇到了绑定选定值的麻烦。字典越来越受限制,当我改变了UI组合框时,设置被正确地触发。在if语句来检查,如果其非法的分隔符,但它在代码中设置选定的值返回到其原始值背后,却是不填充到ComboBox UI(我看到get访问从UI射击)。它的设置selectedvalue并不真正对UI做任何事情。

,如果有人可以点我在正确的方向?

回答

1

一段时间以后才弄清楚,我是正确设置的东西,但因为我是在更新的setter相同的属性,我需要使用调度程序来创建一个新的线程来正确地做了更新。

+0

我面临着类似的东西..如果你还记得你可以让我知道你所说的“更新相同的属性在二传手”是什么意思? – Tany

3

如果您打算使用SelectedValue,推测是Value,您应该设置SelectedValuePathSelectedValue正在做一个“选择”,所以你的财产类型也应该不同。

如果要保留整个KeyValuePair你应该绑定SelectedItem代替。

+0

我曾经有过'SelectValuePath = Value'和我SelectedDelimiter作为一个字符,但它会导致相同的行为,当我试图去改变它.. 我也试图与KVP到的SelectedItem结合,与不用找了。 – Tim

+0

@Tim:你是否真的在代码中设置了属性?如果您设置了该字段,绑定永远不会更新,因为不会引发通知。 –