我正在将项目添加到组合框中,如下所示:
readonly Dictionary<string, string> _persons = new Dictionary<string, string>();
....
//<no123, Adam>, <no234, Jason> etc..
foreach (string key in _persons.Keys)
{
//Adding person code
cmbPaidBy.Items.Add(key);
}
我想通过显示字典中的值(即名称)来使组合框更具可读性。但我需要根据用户输入从数据库中提取人员代码(no123等)。
这样做的正确方法是什么?如何将值和键绑定到组合框项?
答案 0 :(得分:5)
DisplayMember和ValueMember属性适合您:
cmbPaidBy.DataSource = new BindingSource(_persons, null);
cmbPaidBy.DisplayMember = "Value";
cmbPaidBy.ValueMember = "Key";
更深入information here, 在这里BindingSource Class
BindingSource组件有很多用途。首先,它通过在Windows窗体控件和数据源之间提供货币管理,更改通知和其他服务,简化了表单上对数据的绑定控制
答案 1 :(得分:1)
由于Dictionary<TKey, TValue>
未实现IList
(或任何其他数据源接口),因此不能将其用作绑定的数据源。您可以使用其他表示形式,例如DataTable
或List<KeyValuePair<TKey, TValue>>
。
在后一种情况下,您可以使用以下代码轻松绑定:
cmbPaidBy.ValueMember = "Key";
cmbPaidBy.DisplayMember = "Value";
cmbPaidBy.DataSource = _persons; // where persons is List<KeyValuePair<string,string>>
答案 2 :(得分:0)
您可以在XAML中执行此操作,如下所示:
<ComboBox ItemsSource="{Binding Persons}" DisplayMemberPath="Key" ValueMemberPath="Value" />
确保您可以绑定到您的集合(简单字典不会,它不是可观察的集合) - 示例here使用数据表...
答案 3 :(得分:0)
将简单字典(键值对)绑定到组合框作为XAML中的显示成员和值成员
<ComboBox Height="23" HorizontalAlignment="Left" SelectedItem="{Binding SelectedKeyValue}" SelectedValuePath="Value" DisplayMemberPath="Key" Width="120" x:Name="comboBox1" />
<TextBox Height="23" HorizontalAlignment="Left" Name="textBox1" Width="120" Text="{Binding Path=SelectedValue, ElementName=comboBox1, Mode=TwoWay}"/>