get the solution

Blog

Martin Martin
31.03.2009 19:26

UserControl in UserControl erbt DataContext



Im Blog Post "ItemsSource zu UserControl hinzufügen" wurde erläutert wie man eine eigene ItemsSource  zu einem UserControl hinzufügen kann.

Wenn man in einem UserControl (a la UserControl1) ein weiteres UserControl (UserControl2) hat das einen anderen DataContext besitzen soll, wie das UserControl1, steht man vor dem Problem, dass das UserControl2 den DataContext vom übergeordneten UserControl1 erbt.

Das ist unschön und es kann zu Rekursionen kommen. Den DataContext setzen koset außerdem viel Zeit. Bei größeren Datenmengen bekommt man schnell Performance Probleme.

Zumindest wenn man die ItemsSource so belegt:

<UserControl
    x:Class="ClassControl.UserControl1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:class="clr-namespace:ClassControl"
    >

[..]
    <StackPanel Orientation="Vertical">
        <ItemsControl ItemsSource="{Binding}" />
        <class:UserControl3 ItemsSource="{Binding StringList}"></class:UserControl3>
    </StackPanel>
</UserControl>
 

Richtig wäre, wenn man das Binding über die RelativeSource und zusätzlich den DataContext im XAML auf NULL setzt:

      <class:UserControl3
            DataContext="{x:Null}"
            ItemsSource="{Binding StringList,RelativeSource={RelativeSource Mode=FindAncestor,
            AncestorType={x:Type class:UserControl1}}}"
>
</class:UserControl3>

Bei AncestorType geben wir an bei welchem Typ bzw. wo die Source gesucht werden soll.

Links zum Thema: http://msdn.microsoft.com/de-de/library/ms743599.aspx
ItemsSource zu UserControl hinzufügen

Schlüsselwörter: WPF, XAML
zuletzt geändert: 04. April 2009 09:35
Link zu diesem Artikel: (in die Zwischenablage)





(c) 2011 | Impressum |

| Empfehlenswerte Blog Einträge