【发布时间】:2011-09-09 21:59:45
【问题描述】:
对于事件风格的解释提前道歉;我觉得有很多因素都在发挥自己的作用。 WPF 不是我选择的本机框架,它可能显示。 :)
旧情况:我有一个带有多个控件的窗口。根据他们的选择,我使用多重绑定和一个转换器来确定是否需要显示某些控件,以便在用户最终通过 OK 确认(或简单地通过使用 Cancel 取消)之前通知他们更改的含义。这非常有效。
问题:随着时间的推移,控件过多,杂乱无章。
解决方案:将内容放在不同的页面中,以便用户更轻松地浏览。为了让用户在页面之间任意浏览时保持更改,我动态创建它们并将它们放入缓存中(Dictionary<string, BasePage>,见下文),当用户选择它们时,它们将被从中提取。
结果:我需要解除与通知控件的绑定,因为不同的选项现在位于不同的页面上。
解决方案?我在其中放置了一个BasePage 类,它公开了某些抽象的只读属性,这些属性定义了窗口为了进行通知而需要了解的各个方面。例如,bool requiresReboot 属性定义该页面上的当前状态是否需要重新启动才能(完全)生效。特定页面基于其控件实现该属性。
问题:我不知道如何保持创建正确的绑定,以便在页面更改时正确更新。我尝试使用检查所有页面和相关属性的转换器将通知控件绑定到Dictionary<string, BasePage>。
问题:
1) 我如何为此目的创建合适的属性?我想我需要一个DependancyProperty,因为我在 MSDN 上做了很多阅读,但我不知道它是如何组合在一起的。
2)如何在我的自定义属性之间建立链接,以便它允许页面上的(多个)控件更改该属性?我是否以某种方式使用INotifyPropertyChanged?我的旧示例绑定了 XAML 中的几个 CheckBox.IsChecked 属性。我试图避免在控件上放置大量事件(OnChange 等),因为原始代码不需要它,并且我被告知它对于 WPF 而言是一个混乱的解决方案。
3) 最后,我怀疑我可能需要将我的Dictionary<string, BasePage> 类更改为实现某种INotifyPropertyChanged 的自定义实现,但对于集合?我相信 Observable Collection 是我正在寻找的术语。
我希望有人能够弥补我对 WPF(属性)内部的理解的差距;我将非常感激。一个基本的样本会更好,但如果它太复杂,只需朝正确的方向轻推即可。谢谢你。 :)
【问题讨论】:
标签: wpf binding properties dependency-properties