2
votes

I'm using Entity Framework as my database source and need to convert a Linq query "var" type to an ObservableCollection. I then need to bind the ObservableCollection to a ComboBox on WPF form; binding to ItemsSource, DisplayMemeberPath, SelectedValuePath and SelectedValue.

Here is Code:

using (PulseContext pc = new PulseContext())
{
    var maritalcodes =  from m in pc.CodeMaster
                        where m.Type == "16"
                        select new { m.Code, m.Description };

    prop.ClientData.Options = new ObservableCollection<object>(maritalcodes);
}

Problem is the ComboBox is showing this as "{ Code = ????, Description = ???? }" instead of bind to code for value and description for display. What do I have to do to get the ComboBox to bind to the individual elements?

2
You should mark the best answers to your questions as your accepted answers.david.s

2 Answers

3
votes

You need to set SelectedValuePath and DisplayMemberPath like this:

prop.ClientData.Options = new ObservableCollection<object>(maritalcodes);
prop.ClientData.Options.SelectedValuePath = "Code";
prop.ClientData.Options.DisplayMemberPath = "Description";

Or you can set them in xaml like this:

<ComboBox ItemsSource="{Binding Path=maritalcodes}"
          SelectedValuePath="Code"
          DisplayMemberPath="Description" />
1
votes
<ComboBox ItemsSource="{Binding Path=maritalcodes}"
      SelectedValuePath="Code"
      DisplayMemberPath="Description" 
      SelectedValue="{Binding Path=Code}"/>

I hope this will help.