with values wpf data-binding

combobox with values wpf



WPF Databinding (6)

¿Alguien puede indicarme un buen recurso (o arrojarme una pista) para mostrarme cómo hacer DataBinding a los controles (ComboBox, ListBox, etc.) en WPF? Estoy un poco perdido cuando me quitan todas las bondades de WinForms, y no soy tan brillante para empezar ...



El mejor recurso que he encontrado para el enlace de datos de WPF es el blog de Bea Costa . Comience desde la primera publicación y lea hacia adelante. Es impresionante.



Y algunos enlaces más, en caso de que lo anterior no fuera suficiente:

Windows Presentation Foundation - Temas de procedimientos de enlace de datos
- Aproximadamente 30 artículos ''How To'' de MSDN.
"Los temas de esta sección describen cómo usar el enlace de datos para vincular elementos a datos de una variedad de fuentes de datos en forma de objetos CLR (Common Language Runtime) y XML".

Avanzando hacia la vinculación de datos de WPF paso a paso
- Por el gurú de WPF Josh Smith
"Este artículo explica los principios básicos del enlace de datos WPF. Muestra cuatro formas diferentes de realizar la misma tarea simple. Cada iteración se acerca a la implementación más compacta posible, solo XAML. Este artículo es para personas sin experiencia en WPF. el enlace de datos."


en el código subyacente: configure el DataContext de su cuadro de lista igual a la colección a la que se está vinculando.

private void OnInit(object sender, EventArgs e) { //myDataSet is some IEnumerable // myListBox is a ListBox control. // Set the DataContext of the ListBox to myDataSet myListBox.DataContext = myDataSet; }

En XAML, Listbox puede declarar a qué propiedades se une utilizando la sintaxis "Binding".

<ListBox Name="myListBox" Height="200" ItemsSource="{Binding Path=BookTable}" ItemTemplate ="{StaticResource BookItemTemplate}"/>


Hay tres cosas que debes hacer:

  1. Enlace el ItemSource del ComboBox a la lista de opciones.
  2. Enlace el elemento seleccionado a la propiedad que contiene la selección.
  3. Establezca el ComboBox.ItemTemplate en un DataTemplate para un ComboBoxItem.

Entonces, por ejemplo, si su objeto de contexto de datos es una persona que tiene direcciones de correo electrónico y desea elegir su principal, puede tener clases con estas firmas:

public class EmailAddress { public string AddressAsString { get; set; } } public class Person { public IEnumerable<EmailAddress> EmailAddresses { get; } public EmailAddress MainEmailAddress { get; set; } }

Entonces podrías crear el cuadro combinado así:

<ComboBox ItemsSource="{Binding EmailAddresses}" SelectedItem="{Binding MainEmailAddress}"> <ComboBox.ItemTemplate> <DataTemplate> <ComboBoxItem Content="{Binding AddressAsString}"/> </DataTemplate> </ComboBox.ItemTemplate> </ComboBox>

Ahora necesita implementar INotifyPropertyChanged en Person y EmailAddress. Para la colección EmailAddresses, puede respaldarlo con ObjservableCollection.

O como alternativa puede usar Update Controls .NET . Este es un proyecto de código abierto que reemplaza el enlace de datos y no requiere INotifyPropertyChanged. Puede usar cualquier colección que tenga sentido para respaldar la propiedad EmailAddresses. El XAML funciona igual que el anterior, excepto que importa el espacio de nombres UpdateControls.XAML y reemplaza {Binding ...} con {u: Update ...}.