2012-03-28 20 views
0

Ich habe ein Viewmodel mit einem observablecollection Mitglied.Datenkontext von usercontrol ist null

Ich habe eine Benutzersteuerung erstellt, die mit dieser Sammlung und für alle Element in der Sammlung bin ich am Ende in der Benutzersteuerelemente Konstruktor. In diesem Konstruktor ist der Datenkontext Null, warum ist das?

<ItemsControl ItemsSource="{Binding ListOfMyCustomType}"> 
<ItemsControl.ItemTemplate> 
    <DataTemplate> 
     <uc:Tile DataContext="{Binding Path=.}"></uc:Tile> 
    </DataTemplate> 
</ItemsControl.ItemTemplate> 
<ItemsControl.ItemsPanel> 
    <ItemsPanelTemplate> 
     <WrapPanel /> 
    </ItemsPanelTemplate> 
</ItemsControl.ItemsPanel> 

Edit:
Es gibt keine Binding Fehler in der Debug-Ausgabe.

Edit:
von Matthias Gelöst ist die Datacontext nicht verfügbar diesmal. Es wird verfügbar sein, wenn das Steuerelement geladen wird oder wenn sich der Datenkontext ändert. Daumen hoch!

Grüße,

Michel

+0

Ich glaube, ich selbst _binding Pfad löschen ._ = da die Steuerung die Standarddatacontext, dh der Strom verwenden Artikel in der Sammlung. –

+1

Ihr Xaml sieht gut aus. Ich könnte abbilden, dass der DataContext nicht gesetzt ist, wenn der Konstruktor ausgeführt wird. Versuchen Sie, an das UserControl.Loaded-Ereignis anzuhängen, und verwenden Sie den DataContext dort. – MatthiasG

+1

Noch besser: Verwenden Sie das DataContextChanged-Ereignis. – MatthiasG

Antwort

1

Ich würde das Datacontext-Attribut und Bindungsausdruck entfernen. Ihr Benutzersteuerelement übernimmt jedes Element (innerhalb der Auflistung, an das das ItemsControl gebunden ist), das an die Vorlage des aktuellen Elements gebunden wird.

Dann in der geladenen Ereignis Ihrer Kontrolle sollten Sie in der Lage sein, seine Datacontext zugreifen:

var dataContext = this.DataContext as YourCustomType; 
Verwandte Themen