2009-08-21 5 views
1

Ich verwende einen DataTemplateSelector für eine ListView-Spaltenüberschrift Vorlagenauswahl. ListView selbst ist in einer DataTemplate definiert und verfügt über einige Registerkarten. In der Praxis habe ich also dasselbe DataTemplate (also auch ListView) auf mehrere TabItems angewendet. Das heißt, wenn ich Tab {A} wähle und XDataTemplate in der ListView-Spalte {AColumn} setze, dann wechsle den Tab, sagen wir mal Tab {B}, auf der ListView-Spalte (das ist immer die selbe) von {B} {AColumn}, wir werden dieselbe XDataTemplate sehen, da sie dieselben UI-Daten teilen. Also habe ich eine Datenschicht erstellt, auf der ich relationale Informationen über {Tab} < -> {ListView: Column} < -> {HeaderContent} halte. Dies liest DatatemplateSelector tatsächlich, um die Benutzeroberfläche auf dem Benutzerbildschirm korrekt zu aktualisieren. Wie kann ich den DataTemplateSelector benachrichtigen, um die aktuelle Ansicht bei Bedarf auf Anfrage zu aktualisieren?Benachrichtigen Sie DataTemplateSelector über die Änderung

Vielen Dank.

Antwort

3

Ich fand eine Lösung für dieses Problem und es war nicht ganz so schwierig wie ich dachte. Die Vorlage wird auf den Header der ListView-Spalte angewendet. Dies reicht aus, um den Wert des Headers zu variieren, um das interne WPF-Ereignis zu generieren, das SelectTemplate auf DataTemplateSelector automatisch ausführt.

Hier ist ein Beispielcode:

if (MyListView != null) 
{ 
     foreach (GridViewColumn col in (MyListView.View as GridView).Columns) 
     { 
      string header = col.Header.ToString(); 
      col.ClearValue(GridViewColumn.HeaderProperty); 
      col.SetValue(GridViewColumn.HeaderProperty, header); 
     } 
} 

Das ist es. Hoffe, das wird jemandem in der Zukunft helfen.

Verwandte Themen