用Dictionary对象绑定Combobox,但在后面的代码中设置选择的值不生效。

问题描述 投票:2回答:2

这是我的 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 不真正做任何事情的用户界面。

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

c# wpf combobox binding selectedvalue
2个回答
4
投票

你应该设置 SelectedValuePath 如果你要使用 SelectedValue,大概是为了 Value. SelectedValue 是在做一个 "选择",所以你的属性类型也应该是不同的。

如果你想保留整个 KeyValuePair 你应该捆绑 SelectedItem 来代替。


1
投票

花了点时间才弄明白,我的设置是正确的,但由于我在设置器中更新的是同一个属性,所以我需要使用调度器创建一个新的线程来正确地进行更新。

© www.soinside.com 2019 - 2024. All rights reserved.