data conversion wpf data-binding datacontext itemssource

conversion - wpf updatesourcetrigger



¿Por qué DataContext y ItemsSource no son redundantes? (2)

La propiedad ItemsSource se enlazará con el objeto de colección directamente O la propiedad de colección del objeto vinculante de la propiedad DataContext.

Exp:

Class Root { public string Name; public List<ChildRoot> childRoots = new List<ChildRoot>(); } Class ChildRoot { public string childName; }

Habrá dos formas de vincular el control ListBox:

1) Enlace con DataContext:

Root r = new Root() r.Name = "ROOT1"; ChildRoot c1 = new ChildRoot() c1.childName = "Child1"; r.childRoots.Add(c1); c1 = new ChildRoot() c1.childName = "Child2"; r.childRoots.Add(c1); c1 = new ChildRoot() c1.childName = "Child3"; r.childRoots.Add(c1); treeView.DataContext = r; <TreeViewItem ItemsSource="{Binding Path=childRoots}" Header="{Binding Path=Name}"> <HierarchicalDataTemplate DataType="{x:Type local:Root}" ItemsSource="{Binding Path=childRoots}">

2) Enlace con ItemSource:

La propiedad ItemsSource toma la colección siempre. aquí tenemos que unir la colección de raíz

List<Root> lstRoots = new List<Root>(); lstRoots.Add(r); <HierarchicalDataTemplate DataType="{x:Type local:Root}" ItemsSource="{Binding Path=childRoots}">

En el primer ejemplo, hemos vinculado DataContext, que tiene un objeto dentro de ese objeto, tenemos una colección que enlazamos con la propiedad ItemSource, donde en Segundo ejemplo, hemos vinculado directamente la propiedad ItemSource con el objeto de colección.

En WPF Databinding, entiendo que tiene DataContext que le dice a un elemento a qué datos se va a vincular y ItemsSource que "hace el enlace".

Pero, por ejemplo, en este sencillo ejemplo, parece que ItemsSource está haciendo nada útil, ya que, ¿qué más le gustaría que el Elemento hiciera con el DataContext excepto DataContext ?

<ListBox DataContext="{StaticResource customers}" ItemsSource="{Binding}">

Y en ejemplos más complejos de ItemsSource , tiene Path y Source que parece estar invadiendo el territorio de DataContext .

ItemsSource="{Binding Path=TheImages, Source={StaticResource ImageFactoryDS}}"

¿Cuál es la mejor manera de entender estos dos conceptos para saber cuándo y cómo aplicar cada uno de ellos en varios escenarios de codificación?


DataContext es solo una forma útil de elegir un contexto para enlaces para los casos donde no se especifica una fuente explícita. Es heredado, lo que hace posible hacer esto:

<StackPanel DataContext="{StaticResource Data}"> <ListBox ItemsSource="{Binding Customers}"/> <ListBox ItemsSource="{Binding Orders}"/> </StackPanel>

Aquí, Customers y Orders son colecciones en el recurso llamado "Datos". En tu caso, podrías haber hecho esto:

<ListBox ItemsSource="{Binding Source={StaticResource customers}}"/>

ya que ningún otro control necesitó el contexto establecido.