【发布时间】:2009-04-15 23:23:15
【问题描述】:
一点背景:我正在从存储在属性表(控件类型、标签、边距等)中的数据库中加载 WPF UI,我将其加载到我调用的类中控制演示者。基本上我将 ControlPresenter 设置为 ContentPresenter 的 DataContext 并使用 TemplateSelector 来选择要加载的控件类型。 DataTemplate(s) 从 ControlPresenter 公开的 DependencyProperties 中加载它们的属性。
这一切都非常有效。当我尝试将其他演示者(具有实现 INotifyPropertyChanged 的普通属性)中的数据(例如,TextBox 的 Text 属性与演示者的 Name 属性)绑定到这些控件时,我遇到了问题。控件的 DataContext 是关联的 ControlPresenter,因此我无法直接绑定到其他演示者,也无法在同一个依赖项属性上设置两个绑定(我无法将控件和所需的演示者属性绑定到同一个 DP) .
可能的解决方案:
- 我可以将所有其他演示者转换为使用 DP(非常耗时且容易导致继承问题)
- 我可以为我想要通过的每个属性使用两个 DP,并尝试通过更改的通知将它们绑定在一起
这两个似乎都存在问题并且容易崩溃,所以我希望其他人提出了更好的解决方案。
编辑:我想出了一个效果很好的解决方案(见下文)。感谢所有看过这个的人,如果你想出比我更好的方法,请告诉我。
【问题讨论】: