在组合框中显示字典[键,值],但在选择后仅显示[键]

时间:2012-10-04 13:30:16

标签: c# wpf combobox

我有一本字典,我希望允许在组合框中选择键,但也可以显示该值而无需创建另一列。

例如,如果我的字典现在包含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>

1 个答案:

答案 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。

希望有所帮助