My main question is about binding case in the scene that we have multiple sources for a control(a combobox inside a datagrid)(or having both datacontext and itemssource). Then how can we know which source the binding will use? (any syntax to clarify that)
Assuming a datagrid has an itemssource="List of Players" datacontext="Manager" , and has a combobox as a kind of column. We also assume that each player has an Inventory property which is a collection type.
then inside the datagrid.columns:
thank you
The key control to think about is an ItemsControl
(ComboBox
inherits from ItemsControl
and the DataGrid
behaves very similar).
An ItemsControl
has ItemsSource
property of type IEnumerable
. It also has the ItemTemplate
property. What it will do is create one copy of it's ItemTemplate
for every item in ItemsSource
. The DataContext
of the ItemTemplate
will be each item in the ItemsSource
.
In your case of the ComboBox
, the DataContext
of the DataGrid
's column will be your Player
object. If you bind the ComboBox
's ItemSource
to a Player
's inventory, then you will get each item in your ComboBox
's list.
The thing to note is that the DataContext
of the ComboBox
itself is unchanged. It is still the Player
object. If you specify an ItemTemplate
for your ComboBox
, that is what will have it's DataContext
to the items in a Player
's inventory.