14

I am having a difficult time trying to bind my property which is of type List to my combobox through XAML.

public List<string> MyProperty  { get; set; }

The following XAML binding does not work:

<ComboBox Name="cboDomainNames" ItemsSource="{Binding Path=MyProperty}"/> 

But the following assignment:

cboDomainNames.ItemsSource = MyProperty;

works perfectly. What i am missing here?

6
  • 1
    Is the DataContext for your ComboBox correct? Commented Jul 28, 2011 at 5:07
  • Yes the property is in the View ( my app is a MVP- PRISM - WPF) and i have set DataContext= this; And more over the code assignment of ItemSource works! through xaml doesnt! Commented Jul 28, 2011 at 5:11
  • 1
    I think i nailed it! my DataContext was set! BUT it was set after InitializeComponent(), thought that could be th problem. Then jus realized am binding through xaml! the property gets populated when the view is ready after its loaded (i.e on _presenter.OnViewReady())! Since its not a observable collection Nothing gets added to the combobox! specifying it from my code behind works, coz at that time the data exists in the property!! Commented Jul 28, 2011 at 5:56
  • @ioWint: Please post an answer which explains what was wrong and how you fixed it and accept that via the checkmark on the left of the answer. Commented Jul 28, 2011 at 13:14
  • @HB i posted the answer in the comment! i am not sure how to mark it as an answer! Commented Jul 28, 2011 at 17:44

3 Answers 3

10

Posting my comment back to mark the answer.

My DataContext was set, BUT it was set after InitializeComponent(). I thought that could be the problem. Then I realized that as I am binding through xaml, when the view loads, the binding happens to the property which is empty.

The property gets populated when the view is ready after its loaded (i.e on _presenter.OnViewReady()). Since it's not an observable collection nothing gets added to the combobox. Specifying it from my code behind works, because at that time the data exists in the property.

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

Comments

7

Assume you have a List<Foo> called Foos in your window / page. Foo has a property Name. Now you set up the binding in XAML as follows:

<ComboBox ItemsSource="{Binding Path=Foos}"
DisplayMemberPath="Name"
SelectedValuePath="Name"
SelectedValue="{Binding Path=Foo}"
/>

This is based on this SO question. Read this (WPF DataBinding overview) as a good foundation for databinding in WPF.

2 Comments

True, but presently i am interested with a property of List<string>! if code behind assignment of ItemsSource hasnt worked then i wouldnt be more confused! would have gone with a custom entity thinking i always need the DisplayMemberPath!
Wasn't a solution to binding to a List<string>
0

If you don't specify anything than just the path, the binding assumes as a source the container DataContext. By the way, the useful property is defined on the container (e.g. the window).

You may solve it as follows (in the xaml):

ItemsSource="{Binding Path=MyProperty, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}"

1 Comment

i tried this Mario! but hard luck! i couldnt get it populated. view is inheriting from a baseView, so instead of window i put my baseView! it still doesnt get binded!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.