将 Combobox 与 Dictionary 对象绑定,但在后面的代码中设置所选值不生效

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 没有任何作用。

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

H.B*_*.B. 7

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

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