Reputation: 1619
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?
Upvotes: 14
Views: 58829
Reputation: 5655
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.
Upvotes: 7
Reputation: 7304
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}}}"
Upvotes: 0
Reputation: 1619
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.
Upvotes: 10