ändern Ich habe ein UserControl
, in dem der Schlüssel visuelle Element wird wie folgt dargestellt:Bindung an Usercontrol Datacontext: update ContentTemplateSelector wenn einige Eigenschaften
<ContentPresenter Content="{Binding}"
ContentTemplateSelector="{StaticResource MStatusDisplaySelector}" />
Das DataContext
dieses Element (dh das Bindungsziel) wird die UserControl
selbst. Die MStatusDisplaySelector
ist eine komplexe Selektor, und wählt eine DataTemplate
auf der Grundlage mehrerer Eigenschaften dieses UserControl
(die alle einfach sind DependencyProperty
).
Das Problem ist, wenn eine dieser Eigenschaften ändern, muss möglicherweise eine andere Vorlage ausgewählt werden, und ich möchte die ContentPresenter
aktualisieren. Dies geschieht offensichtlich nicht. Was ist der beste Weg, um dies zu umgehen?
Idealerweise würde Ich mag in jeder beteiligten Eigenschaftsänderung Rückrufe vermeiden umzusetzen. Nicht nur das ist zu ausführlich, sondern der Vorlagenselektor muss möglicherweise später eine andere Gruppe von Eigenschaften verwenden, und es ist nicht praktisch, dies synchron zu halten. Es ist jedoch wahrscheinlich in Ordnung, die Vorlage unter Eigenschaft Änderung zu aktualisieren.
P.S. Nehmen Sie an, dass die MStatusDisplaySelector
Logiken zu kompliziert sind, um auf einen traditionellen Stil Selektor mit Style.Triggers
reduziert werden. Ich möchte, dass es im Code-Behind bleibt.
Klingt wie ein Stil-Trigger mit Setter, der die Vorlage, oder auch eine Vorlage Wähler ändern. Scheint etwas ungewöhnlich, die gesamte Vorlage bei Eigenschaftsänderungen zu ändern (normalerweise würden Sie Elemente der Vorlage basierend auf Eigenschaften ein- oder ausblenden und Vorlagen nur ändern, wenn sich der Laufzeittyp von ContentControl.DataContext ändert), aber ohne mehr Details, wirklich kann nicht beurteilen. –
Nun, @Ed, merke ich, es kann nicht genau WPF artig sein (ich lerne nur), aber wie gesagt, 'MStatusDisplaySelector' ist nicht trivial, und ich sehe nicht, wie ich es in XAML implementieren könnte (oder eher wird es sehr ausführlich sein). Zum Beispiel ist eine der Eigenschaften ein komplexes bitweises Muster, basierend auf dem ich ein Bild oder ein Raster von Bildern oder Text anzeigen oder es insgesamt ausblenden muss. So etwas in Code-Behind zu schreiben ist einfach, aber nicht in XAML. – Zeus
Sie könnten diese Logik in einem Wertkonverter tun, denke ich. Natürlich würden Sie nicht versuchen, diese Logik in XAML zu schreiben. Jedenfalls hört es sich so an, als hättest du das gedacht. –