2010-09-03 5 views
5

Ich versuche, den ausgewählten Tab-Element eines WPF Tab-Steuerelement mit dem letzten Element, das hinzugefügt wurde, zu synchronisieren.Erkennen, wenn ein Tab-Element zu WPF Tab-Steuerelement hinzugefügt wurde

Da gibt es keine solche Eigenschaft wie z.B. IsSynchedWithLastAddedItem, ich versuche zu erkennen, wann ein Element hinzugefügt wurde, um das SelectedItem auf das zuletzt hinzugefügte Objekt zu verweisen.

Ich kann das Ereignis nicht finden, das ausgelöst wird - entweder auf der Registerkarte Steuerelement oder seine Elemente, wenn ein TabItem hinzugefügt wurde.

Ich bin sicher, dass so etwas existieren muss, also hoffe ich, dass mir jemand helfen kann.

Antwort

9
var view=CollectionViewSource.GetDefaultView(m_tabControl.ItemsSource); 
view.CollectionChanged+=(o,e)=>{/*Here your code*/}; 

Wenn Sie direkt mit der Items-Sammlung arbeiten, funktioniert die gleiche Technik auch. Ruft die standardmäßige CollectionViewSource für diese Sammlung ab.

var view=CollectionViewSource.GetDefaultView(m_tabControl.Items); 
view.CollectionChanged+=(o,e)=>{/*Here your code*/}; 

Als Timores schrieb, für die m_tabControl.Items-Eigenschaft können Sie einen Handler direkt anschließen. Das Gleiche gilt auch für die meisten ItemsSource-Verweise, aber dort müssen Sie sich selbst nach der INotifyCollectionChanged-Schnittstelle überprüfen.

Ich habe es nicht getestet. Mach einen Kommentar, wenn es nicht funktioniert.

+0

Danke, die zweite Option funktionierte perfekt. Die erste wird nur funktionieren, sobald die ItemsSource festgelegt wurde, so dass Sie sie nicht im Konstruktor der Ansicht verwenden können. Der Grund ist, dass zu diesem Zeitpunkt die ItemsSource immer noch null ist und somit auch die Standardansicht. –

+0

Das zweite funktioniert auch für mich. – torpederos

0

Die Items-Auflistung ist vom Typ ItemCollection, der von CollectionView abgeleitet wird, die INotifyCollectionChanged implementiert. So können Sie CollectionChanged hören und erfahren, wann ein Artikel hinzugefügt wird.

Ich weiß jedoch nicht, wie man das in XAML macht.

Verwandte Themen