Rauld Rauld - 2 months ago 26
C# Question

Key Value Pair Combobox in WPF

Consider I have Key Value Pair Collection (Ex Key=MSFT Value=MSFT Microsoft) which I bind to the ComboBox. DisplayMemeberPath=Value. the Following needs to be accomplished


  • On Selection of a Item only the Key needs to be displayed in Combo,

  • the user could also type a brand new value in the Combo.



I cant come up with the solution that supports both these features. Solving one breaks the other.

<ComboBox IsTextSearchEnabled="True" Name="cmbBrokers" IsEditable="True"
ItemsSource="{Binding BrokerCodes}" SelectedValuePath="Key"
DisplayMemberPath="Value" Text="{Binding SelectedBroker, Mode=TwoWay}">

Answer

I guess what you're looking for is as follows.

public class ComboBoxPairs
{
    public string _Key { get; set; }
    public string _Value { get; set; }

    public ComboBoxPairs(string _key,string _value )
    {
        _Key = _key ;
        _Value = _value ;
    }
}

Then you go on and use this class like this

List<ComboBoxPairs> cbp = new List<ComboBoxPairs>();

cbp.Add(new ComboBoxPairs("Microsoft", "MSFT"));
cbp.Add(new ComboBoxPairs("Apple", "AAPL"));

And bind it to the combobox you have

cmbBrokers.DisplayMemberPath = "_Key";
cmbBrokers.SelectedValuePath = "_Value";

cmbBrokers.ItemsSource = cbp;

And When you need to access it just do this

ComboBoxPairs cbp = (ComboBoxPairs)cmbBrokers.SelectedItem;

string _key = cbp._Key;
string _value = cbp._Value;

This is all you need to do.

Comments