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 に答える