3

这是我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 语句中,它确实将所选值设置回其在后面代码中的原始值,但它不会填充到ComboBoxUI(我看到 get 访问器从 UI 触发)。它的类似设置SelectedValue并没有真正对 UI 做任何事情。

如果有人能指出我正确的方向?

4

2 回答 2

6

SelectedValuePath如果要使用,则应该设置SelectedValue,大概是ValueSelectedValue正在进行“选择”,因此您的属性类型也应该不同。

如果你想保留整体KeyValuePair,你应该绑定SelectedItem

于 2011-11-19T03:14:54.450 回答
1

花了一段时间才弄清楚,我设置正确,但是因为我在设置器中更新了相同的属性,所以我需要使用调度程序来创建一个新线程来正确地进行更新。

于 2011-11-30T15:09:07.127 回答