8

Hi I´m trying to bind a List<> to a combobox.

<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"; } 

I become no Error but the Combobox is always empty. Cusco is the Property of my List. I have no idea whats wrong with this code. Can you help me?

Greets

 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; } } 

this is the Customer Class which is my model.

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()); } } 

and this is the ViewModel.

2
  • Can you post the Customer class? Commented Jun 15, 2012 at 18:30
  • 1
    Have you confirmed that there's actually something in the List that you're feeding to ItemsSource (at the time that it gets set, since you don't have this setup as a binding)? Commented Jun 15, 2012 at 18:46

2 Answers 2

23

Try setting the ItemsSource property with an actual Binding object

XAML Method (recommended):

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

Programmatic method:

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); 

Also, the setter on your Customer property should raise the PropertyChanged event

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

If the above does not work, try moving the binding portion from the constructor to the OnLoaded override method. When the page loads, it may be resetting your values.

Sign up to request clarification or add additional context in comments.

1 Comment

ok i have tried this. But the combobox is Empty. I have also tried it in the PageLoaded event.
3

As an expansion on Steve's answer,

You need to set the datacontext of your form.

Currently you have this:

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

It should be changed to this:

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

Then as Steve noted you will need another property on the viewmodel to store the selected item.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.