2012-06-15 13 views
8

Hola, estoy intentando vincular una lista <> a un cuadro combinado.wpf combobox binding

<ComboBox Margin="131,242,275,33" x:Name="customer" Width="194" Height="25"/> 

public OfferEditPage() 
    { 
     InitializeComponent(); 
     cusmo = new CustomerViewModel(); 
     DataContext = this; 
     Cusco = cusmo.Customer.ToList<Customer>(); 
     customer.ItemsSource = Cusco; 
     customer.DisplayMemberPath = "name"; 
     customer.SelectedValuePath = "customerID"; 
     customer.SelectedValue = "1"; 
    } 

me convierto en ningún error pero el cuadro combinado es siempre vacío. Cusco es la propiedad de mi lista. No tengo idea qué está mal con este código. ¿Me puedes ayudar?

Saluda

public class Customer 
{ 
    public int customerID { get; set; } 
    public string name { get; set; } 
    public string surname { get; set; } 
    public string telnr { get; set; } 
    public string email { get; set; } 
    public string adress { get; set; } 
} 

esta es la clase de cliente que es mi modelo.

public class CustomerViewModel 
{ 
    private ObservableCollection<Customer> _customer; 

    public ObservableCollection<Customer> Customer 
    { 
     get { return _customer; } 
     set { _customer = value; } 
    } 

    public CustomerViewModel() 
    { 
     GetCustomerCollection(); 
    } 

    private void GetCustomerCollection() 
    { 
     Customer = new ObservableCollection<Customer>(BusinessLayer.getCustomerDataSet()); 
    } 

} 

y esta es la ViewModel.

+0

¿Puedes publicar la clase 'Cliente'? –

+1

¿Ha confirmado que hay algo en la Lista que está alimentando a ItemsSource (en el momento en que se establece, ya que no tiene esta configuración como un enlace)? – Tim

Respuesta

23

Trate de establecer la propiedad ItemsSource con un objeto Binding real

XAML Método (recomendado):

<ComboBox 
    ItemsSource="{Binding Customer}" 
    SelectedValue="{Binding someViewModelProperty}" 
    DisplayMemberPath="name" 
    SelectedValuePath="customerID"/> 

método de programación:

Binding myBinding = new Binding("Name"); 
myBinding.Source = cusmo.Customer; // data source from your example 

customer.DisplayMemberPath = "name"; 
customer.SelectedValuePath = "customerID"; 
customer.SetBinding(ComboBox.ItemsSourceProperty, myBinding); 

Además, el organismo en su propiedad del cliente debe plantear el evento PropertyChanged

public ObservableCollection<Customer> Customer 
{ 
    get { return _customer; } 
    set 
    { 
     _customer = value; 
     RaisePropertyChanged("Customer"); 
    } 
} 

Si lo anterior no funciona, intente mover la parte de encuadernación del constructor al método de sobrescritura OnLoaded. Cuando la página se carga, puede estar restableciendo sus valores.

+1

bien, lo he intentado. Pero el cuadro combinado está vacío. También lo probé en el evento PageLoaded. – Veeesss

3

como una expansión en la respuesta de Steve,

Tiene que establecer el DataContext de su formulario.

Actualmente está esta:

InitializeComponent(); 
cusmo = new CustomerViewModel(); 
DataContext = this; 

Debe ser cambiado a esto:

InitializeComponent(); 
cusmo = new CustomerViewModel(); 
DataContext = cusmo; 

Entonces, como señaló Steve necesitará otra propiedad en el modelo de vista para almacenar el elemento seleccionado.