WPF: ItemsControl und der DataContext

Ich habe ein Hauptfenster mit einem Benutzer-Steuerelement, genannt SuperMode. SuperMode besteht aus einer Sammlung von Personen, und jede person, die in dieser Sammlung hat Ihre eigene Sammlung von Aufgaben. Klingt einfach, nicht wahr?

Aus der Datei SuperMode.xaml:

<UserControl 
    x:Class="Prototype.SuperMode"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:Prototype"
    DataContext="{Binding RelativeSource={RelativeSource Self}}"> <!-- NOTE! -->
    <!-- Look at how I'm setting the DataContext, as I think it's
         important to solve the problem! -->

    <ScrollViewer CanContentScroll="True">
        <ItemsControl ItemsSource="{Binding People}" Margin="1">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <UniformGrid Rows="1"/>
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
        </ItemsControl>
    </ScrollViewer>

</UserControl>

Diese funktioniert einwandfrei und ich kann sehen vier Menschen, als ich erwarte! Alles was ich jetzt noch tun müssen, ist der XAML-Recht für die Person Benutzer Steuern, so dass alle Ihre Aufgaben werden ebenfalls angezeigt.

Wie Sie sehen können, bin ich mit dem People - Eigenschaft für das Steuerelement Auffüllen mit Gegenständen. Die People Eigenschaft hat den Typ ObservableCollection<Person>, wo Person ist ein anderer Benutzer die Kontrolle als solche...

Vom Person.xaml:

<UserControl 
    x:Class="Prototype.Person"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:Prototype">

    <Border Background="Black" CornerRadius="4" Margin="1">
        <ItemsControl ItemsSource="{Binding Tasks}">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel/>
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
        </ItemsControl>
    </Border>

</UserControl>

Tasks hier ist eine Eigenschaft, die Person mit Typ -ObservableCollection<Task>. Dies ist, wo es klemmt! Offenbar WPF finde keine Tasks Eigenschaft und suchen Sie sich das Ausgabefenster von VS2008, finde ich folgende:

System.Windows.Datenfehler: 39 : BindingExpression Pfad-Fehler: 'Aufgaben' - Eigenschaft nicht auf "Objekt" "SuperMode' (Name= "SuperMode')'. BindingExpression:Path=Aufgaben; DataItem='SuperMode' (Name= "SuperMode'); target element is 'ItemsControl' (Name="); target property is 'ItemsSource "' (Typ 'IEnumerable')

Nun bin ich verloren. Es scheint, dass ich habe die DataContext - Attribut auf jeder Person, sonst wird es denke immer noch, dass die Daten Kontext ist SuperMode, aber wie mache ich das?

InformationsquelleAutor Deniz Dogan | 2010-02-08
Schreibe einen Kommentar