2011-12-15 12 views
7

Considere que tengo Colección de pares de valores clave (Clave Ex = Valor MSFT = MSFT Microsoft) que vinculo al ComboBox. DisplayMemeberPath = Valor. A raíz de las necesidades que hay que realizarCombobox de pares de valores clave en WPF

  • Por selección de un elemento sólo la clave hay que mostrar en Combo,

  • el usuario también puede escribir un nuevo valor de la marca en el combo.

No puedo encontrar la solución que admita estas dos características. Resolver uno rompe al otro.

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

Puede intentar con un cuadro de texto separado que muestre la clave del elemento seleccionado. Denomine el cuadro combinado y úselo como origen del elemento de enlace y la ruta se selecciona elemento. Creo que utilizas selecteditem.key para llegar a la clave, pero no estoy seguro. – Paparazzi

+0

si quiere ver la nueva entrada que el usuario ingresó, debe actualizar su fuente de elementos (BrokerCodes) con el nuevo valor – blindmeis

Respuesta

27

Supongo que lo que estás buscando es lo siguiente.

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

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

A continuación, seguir y utilizar esta clase como esta

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

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

y enlazarlo a la lista desplegable que tiene

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

cmbBrokers.ItemsSource = cbp; 

y cuando es necesario para acceder a ella solo hace esto

ComboBoxPairs cbp = (ComboBoxPairs)cmbBrokers.SelectedItem; 

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

Esto es todo tienes que hacer

-3

No creo que un combobox directo fuera de la caja sea el elemento de UI adecuado para su uso en esta situación. El problema aquí es que el cuadro combinado no está diseñado para admitir pares clave/valor, especialmente si desea que el usuario pueda agregar valores al diccionario mientras se vincula a la clave. Por ejemplo, si les permite agregar un valor, ¿cómo agregan la clave o la tecla para actualizar?

Creo que la solución es tener dos controles: un cuadro combinado para la selección de teclas y un cuadro de texto para la entrada de valores. El cuadro de texto de valores está oculto hasta que el usuario seleccione una tecla. Una vez que se selecciona la tecla, pídales que ingresen su entrada de valor en el cuadro de texto y presionen enter o un botón, luego establezca el valor en la tecla seleccionada.

3

Ampliando el ejemplo de Adams con una solución aún más genérica.

En xaml.cs, cree una propiedad de colección observable y asígnele una colección.

ObservableCollection < KeyValuePair < string , string > > MyCollection { get; set; } 

MyCollection = new ObservableCollection < KeyValuePair < string , string > > () 

{ 
    new KeyValuePair < string , string > ("key1" ,"value1"), 
    new KeyValuePair < string , string > ("key2" ,"value2") 
}; 

En el archivo xaml databind su colección observable a la propiedad que creó en el código subyacente.

<ComboBox Grid.Row="3" 
      Grid.Column="1" 
      ItemsSource="{Binding MyCollection}" 
      DisplayMemberPath="Key" /> 

Puede cambiar el DisplayMemberPath="Key" a DisplayMemberPath="Value" si desea mostrar el valor en su lugar.

Cuestiones relacionadas