我有一个UserControl
,其中关键的视觉元素如下所示:
<ContentPresenter Content="{Binding}"
ContentTemplateSelector="{StaticResource MStatusDisplaySelector}" />
此元素的DataContext
(即绑定目标)是UserControl
本身。 MStatusDisplaySelector
是一个复杂的选择器,它会根据此DataTemplate
的几个属性选择UserControl
(这些属性都是简单的DependencyProperty
)。
问题是,当任何这些属性发生变化时,可能需要选择不同的模板,我想更新ContentPresenter
。这显然不会发生。解决这个问题的最佳方法是什么?
理想情况下,我希望避免在每个涉及的属性中实现更改回调。这不仅过于冗长,而且模板选择器可能需要稍后使用不同的属性集,并且保持同步并不方便。但是,可以在任何属性更改上更新模板。
P.S。假设MStatusDisplaySelector
逻辑过于复杂,无法简化为Style.Triggers
的传统样式选择器。我希望它留在代码隐藏中。
答案 0 :(得分:1)
将此添加到您的UserControl代码:
protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e)
{
if (e.OldValue != null && e.NewValue != null && e.Property.ToString() == "Title")
{
System.Diagnostics.Debug.WriteLine(e.Property.ToString() + " > " + e.OldValue.ToString() + " : " + e.NewValue.ToString());
/* You can call your TemplateSelector method here, or put some code here */
}
base.OnPropertyChanged(e);
}
在这个重写的方法中,您可以检查调用此方法的Property
,并采取相应的相应措施。