So, hier ändert, ist die XAML, die ich habe:WPF: Reapply Datatemplateselector, wenn ein bestimmter Wert
<ItemsControl ItemsSource="{Binding Path=Groups}" ItemTemplateSelector="{Binding RelativeSource={RelativeSource AncestorType=Window}, Path=ListTemplateSelector}"/>
Hier meine ListTemplateSelector Klasse:
public class ListTemplateSelector : DataTemplateSelector {
public DataTemplate GroupTemplate { get; set; }
public DataTemplate ItemTemplate { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container) {
GroupList<Person> list = item as GroupList<Person>;
if (list != null && !list.IsLeaf)
return GroupTemplate;
return ItemTemplate;
}
}
Die GroupTemplate Datenvorlage die ListTemplateSelector in sich selbst verweist Deshalb habe ich mich eingerichtet, wie ich es eingerichtet habe. Es ist der einzige rekursive Hack, den ich zusammenstellen könnte. Aber das ist nicht das Problem, das ich habe.
Mein Problem ist, ich möchte von ItemTemplate in GroupTemplate ändern, wenn die IsLeaf-Eigenschaft ändert. Dies funktioniert wunderbar zum allerersten Mal seit es das Anwesen das erste Mal liest. Sobald sich diese Eigenschaft ändert, wird der Vorlagenselektor nicht erneut angewendet. Jetzt könnte ich Trigger verwenden, um an den Wert zu binden und die Elementvorlage entsprechend zu setzen, aber ich muss in der Lage sein, für jedes Element eine andere Vorlage festzulegen, da sie sich in einem anderen Status befinden könnten.
Zum Beispiel sagen, dass ich eine Liste von Gruppen wie dieses:
Gruppe 1: IsLeaf = false, so template = GroupTemplate
Gruppe 2: IsLeaf = true, so template = ItemTemplate
Gruppe 3: IsLeaf = false, so template = GroupTemplate
Und sobald der Gruppe 1 Änderungen IsLeaf Eigenschaft auf true, die templat e muss automatisch zu ItemTemplate wechseln.
EDIT:
Hier ist meine vorübergehende Lösung. Gibt es einen besseren Weg?
Haben Sie zur Verdeutlichung den DataTemplateSelector-Ansatz zugunsten von Triggern verworfen, oder haben Sie die Trigger auch mit dem DataTemplateSelector in die Lösung umgesetzt? – alastairs
@alastairs Ich kann nicht für OP sprechen, aber die Trigger scheinen den DataTemplateSelector unnötig zu machen. – piedar