事件式的解释进展道歉;我觉得有很多因素都起到了自己的作用。 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
的自定义实现,但对于集合?我相信可观察集合是我期待的术语。
我希望有人能够弥合我对WPF(财产)内部的理解的差距;我非常感谢它。一个基本的样本会更好,但如果它太复杂,只需朝着正确的方向推动即可。谢谢。 :)