2011-12-21 169 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