0

我有一个字典,我想允许在组合框中选择键,但也显示值而不必创建另一列。

例如,如果我的字典现在包含 3 个项目

Dictionary<string, double> test = new Dictionary<string, double>();
    //KEY , VALUE
    //"Item1" , 4.0
    //"Item2" , 4.5
    //"Item3" , 5.0

我希望组合框下拉列表显示显示键和值的可用选择

[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>
4

1 回答 1

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。

希望能帮助到你

于 2012-10-04T14:00:39.907 回答