我有一本字典,我希望允许在组合框中选择键,但也可以显示该值而无需创建另一列。
例如,如果我的字典现在包含3个项目
Dictionary<string, double> test = new Dictionary<string, double>();
//KEY , VALUE
//"Item1" , 4.0
//"Item2" , 4.5
//"Item3" , 5.0
我希望组合框下拉列表显示可用选项,显示BOTH键和值
[Item1, 4.0]
[Item2, 4.5]
[Item3, 5.0]
并说如果选择了[Item2, 4.5]
,那么只有键在组合框中显示为当前选择,在这种情况下,选择后会显示以下内容...
Item2
我尝试过以下操作,但在组合框选择列表和选择后显示[key,value]
comboboxColumn2.SelectedValuePath= "Key";
comboboxColumn2.ItemsSource = test;
我也尝试使用comboboxColumn2.DisplayMemberPath= "Value";
的组合,但无法按照我的意愿对其进行格式化。
有人可以说是否可能以及正确的语法是什么?
编辑:
组合框实际上是ComboboxColumns所以只有2个可用的事件看起来不太有用
<DataGrid.Columns>
<DataGridComboBoxColumn Header="Department Id" x:Name="comboboxColumn1"
SelectedValueBinding="{Binding Department Id}" />
<DataGridComboBoxColumn Header="Department Id" x:Name="comboboxColumn2"
SelectedValueBinding="{Binding Department Name}"/>
</DataGrid.Columns>
答案 0 :(得分:2)
如果你想在这里的代码上做这件事,那就是:
<ComboBox Height="23" HorizontalAlignment="Left" Margin="168,100,0,0" Name="comboBox1" VerticalAlignment="Top" Width="120" DropDownOpened="comboBox1_DropDownOpened" DropDownClosed="comboBox1_DropDownClosed" />
public MainPage()
{
InitializeComponent();
var source = new Dictionary<string, double>();
source.Add("Item1", 0.4);
source.Add("Item2", 0.3);
source.Add("Item3", 0.1);
var formateDSource = new Dictionary<string, string>();
foreach (var item in source)
{
formateDSource.Add(string.Format("[{0}, {1}]", item.Key, item.Value), item.Key);
}
comboBox1.ItemsSource = formateDSource;
comboBox1.DisplayMemberPath = "Value";
}
private void comboBox1_DropDownOpened(object sender, EventArgs e)
{
comboBox1.DisplayMemberPath = "Key";
}
private void comboBox1_DropDownClosed(object sender, EventArgs e)
{
comboBox1.DisplayMemberPath = "Value";
}
我刚刚创建了一个formatedSource,然后根据你的描述更改了displayMemberPath。
希望有所帮助