2011-12-21 172 views
3

我试图想出了以下问题的解决方案:具有子属性的依赖属性更新主属性?

我有一个包含3个属性一个DateTimeRange类:

  • 开始:日期时间
  • 结束:日期时间
  • 长度:长度(=结束开始)

该类在整个项目中用作各种控件的依赖项属性。这个值是可变的,例如,如果开始改变,结束将被移动相同的偏移量(保持相同的长度)。

我的问题是,在侦听范围更新的代码中,只有在更换完整对象时,才会收到任何属性发生更改的事件。

我想让DateTimeRange类在更改属性时通知用户整个对象已更改,而不仅仅是一个属性。

我试图让DateTimeRange成为一个不可变的结构体。但是这使得DataBinding对其任何属性都有两种不可能的方式。

有没有人有建议如何做到这一点?国际海事组织这个问题是非常令人沮丧的,因为相同的问题发生在边缘例如(你不能绑定到Margin.Left的控制)。

+0

你使用SL还是WPF? – 2011-12-21 10:09:29

+0

@Dmitry:标签说WPF ... – 2011-12-21 10:16:31

回答

2

该框架并不真的支持这个要求。我会采取的做法是使DateTimeRange实施INotifyPropertyChanged,引发事件,只要其任何属性发生变化。对于具有DateTimeRange作为依赖项属性的类,在属性更改时为INotifyPropertyChanged添加/删除处理程序。在您的处理程序中,您可以执行所需的操作。

请注意,您可以使DateTimeRange a DependencyObject,这将允许您创建其属性的双向绑定。

+0

你可以请澄清这一点:在一个具有DateTimeRange作为依赖项属性的类添加/删除处理程序为INotifyPropertyChanged属性更改。谢谢! – thumbmunkeys 2011-12-21 12:54:37

+0

这需要使用此控制的更多工作。不是我想要的,然后我需要为同一个属性更改两个侦听器。 (一个倾听财产的变化,一个倾听该财产的变化) – Abstractor 2011-12-21 13:14:48