ItemsControl ItemTemplate Binding

n WPF4.0 habe ich eine Klasse, die andere Klassentypen als Eigenschaften enthält (Kombination mehrerer Datentypen für die Anzeige). Etwas wie

public partial class Owner
{
     public string OwnerName { get; set; }
     public int    OwnerId   { get; set; }
}

partial class ForDisplay
{
    public Owner OwnerData { get; set; }
    public int Credit { get; set; }
}

In meinem Fenster habe ich ein ItemsControl mit den folgenden Angaben (aus Gründen der Übersichtlichkeit abgeschnitten):

<ItemsControl ItemsSource={Binding}>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
          <local:MyDisplayControl 
                OwnerName={Binding OwnerData.OwnerName}
                Credit={Binding Credit} />
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

Ich erhalte dann eine Sammlung von Anzeigeinformationen von der Datenschicht und setze dasDataContext desItemsControl zu dieser Sammlung. Die "Credit" -Eigenschaft wird korrekt angezeigt, die OwnerName -Eigenschaft jedoch nicht. Stattdessen erhalte ich einen Bindungsfehler:

Fehler 40: BindingExpression-Pfadfehler: Die Eigenschaft 'OwnerName' wurde für 'object' '' ForDisplay '(HashCode = 449124874)' nicht gefunden. BindingExpression: Path = OwnerName; DataItem = 'ForDisplay' (HashCode = 449124874); Zielelement ist 'TextBlock' (Name = txtOwnerName '); Zieleigenschaft ist 'Text' (Typ 'String')

Ich verstehe nicht, warum versucht wird, in der ForDisplay-Klasse nach der OwnerName-Eigenschaft zu suchen, und nicht in der Owner-Klasse aus der ForDisplay-OwnerData-Eigenschaft.

Bearbeite Es hat anscheinend etwas mit der Verwendung des benutzerdefinierten Steuerelements zu tun. Wenn ich die gleichen Eigenschaften an ein @ binTextBlock, sie funktionieren korrekt.

<ItemsControl ItemsSource={Binding}>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
          <StackPanel>
              <local:MyDisplayControl 
                        OwnerName={Binding OwnerData.OwnerName}
                        Credit={Binding Credit} />
              <TextBlock Text="{Binding OwnerData.OwnerName}" />
              <TextBlock Text="{Binding Credit}" />
          </StackPanel>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

Antworten auf die Frage(2)

Ihre Antwort auf die Frage