objects databinding c# wpf xaml data-binding combobox

c# - databinding - wpf combobox datacontext



Enlazar texto al elemento seleccionado en el cuadro combinado (2)

No me gustan los elementos de la caja de códigos complicados. En esta situación, siendo tan simple, tendría una lista de ese tipo para la fuente del cuadro combinado. Si es más complicado que una Lista de cadenas, crearía una tabla de búsqueda en su base de datos y la usaría en su lugar. Para la ruta de la lista de cadenas, sería algo así como:

public List<String> LetterTypes { get; set; } public String SelectedLetterType { get; set; }

int ctor:

LetterTypes = new List<String> { A, B, C }

Luego en tu Vista:

<ComboBox ItemsSource="{Binding LetterTypes}" SelectedItem="{Binding SelectedLetterType}" />

Veo que ya ha encontrado una solución para su problema, pero tal vez para futuras referencias, esta puede ser otra forma de completar un cuadro combinado.

Tengo un campo de texto en la base de datos, pero ahora no quiero que sea un campo abierto, quiero restringirlo a: digamos A, B y C.

Para esto quiero usar un Combobox.

Pregunta: ¿Cómo puedo vincular el elemento seleccionado a la propiedad de cadena, dado que los Elementos del cuadro combinado están definidos en XAML?

XAML:

<ComboBox SelectedValue="{Binding Path=MyProperty}"> <!-- Not working--> <ComboBoxItem>A</ComboBoxItem> <ComboBoxItem>B</ComboBoxItem> <ComboBoxItem>C</ComboBoxItem> </ComboBox>

Clase:

public Class MyClass:INotifyPropertyChanged { private string myProperty; public string MyProperty { get{return myProperty;} set{ myProperty=value; OnPropertyChanged("MyProperty"); } } }

Por lo tanto, el usuario cambiará el elemento seleccionado y el nuevo valor se actualizará en el objeto con conexión de datos.

EDITAR: Gracias a los comentarios y respuestas solucioné parcialmente el problema, el único problema era que la selección de cuadro combinado estaba vacía cuando se inició el programa. Lo solucioné así:

<ComboBox SelectedValuePath="Content"> <ComboBoxItem>A</ComboBoxItem> <ComboBoxItem>B</ComboBoxItem> <ComboBoxItem>C</ComboBoxItem> <ComboBox.SelectedValue> <Binding Path="MyProperty" Mode="TwoWay"/> </ComboBox.SelectedValue> </ComboBox>

Moví la parte de valor seleccionada fuera de los atributos de Combobox, y utilicé el elemento de propiedad sintax, esto garantiza que la colección esté definida antes de que se use.


Wpf ComboBox tiene tres propiedades de selección y una propiedad de visualización:

  • SelectedItem
  • SelectedValue
  • SelectedValuePath
  • DisplayMemberPath

Al usar SelectedValue también debe establecer SelectedValuePath (casi siempre). Comprenda que los Items de su caso contienen una secuencia ( ItemCollection ) de objetos ComboBoxItem , y al igual que cualquier otro objeto, debe especificar el SelectedValuePath (propiedad de lectura) al que desea vincularse; En este caso, desea acceder a la propiedad ComboBoxItem.Content ( http://msdn.microsoft.com/en-us/library/system.windows.controls.contentcontrol.content(v=vs.110).aspx ).

<ComboBox SelectedValue="{Binding Path=MyProperty}" SelectedValuePath="Content"> <ComboBoxItem>A</ComboBoxItem> <ComboBoxItem>B</ComboBoxItem> <ComboBoxItem>C</ComboBoxItem> </ComboBox>

Ahora está vinculando SelctedValue a la propiedad MyProperty utilizando la propiedad Content del elemento seleccionado, que es la cadena que está buscando.