2011-02-08 65 views
5

改變了我有一個多部分的問題:檢測的DataContext在Silverlight

(1)是否有一個很好的理由Silverlight的不公開DataContextChanged僅事件?如果微軟的某個人在FrameworkElement類中將internal更改爲public(如WPF那樣),似乎可以避免很多麻煩。

(2)我發現onetwo不同的方法來通過一個配置或其他使用DependencyProperties黑客用自己的方式爲DataContextChanged僅事件。但我無法讓他們可靠地工作。到目前爲止,我的測試似乎表明,他們解決了被黑客入侵的DataContextChanged事件,這對我連接到的第一個類來說很好,但不會爲其他任何類進行解僱。有其他人遇到這個問題嗎?或者更好的是,他們是否有辦法解決這個問題? (3)我一直在爲自己想要知道什麼時候DataContext發生了變化的原因是,有些UI操作在XAML中很難實現,但在代碼隱藏方面很微不足道;對於其中的許多事情,我需要處理ViewModel引發的事件;因此我需要知道我的ViewModel何時更改,因此我可以連接事件處理程序。這是對世界的準確看法嗎?或者是我想要在代碼中處理這類事情的事實 - 背後有一個很好的跡象表明我的思想在某些方面已經脫離了軌道?我不是MVVM純粹主義者:我只想快速從這裏獲得良好的代碼,並且我並不特別關心我如何到達那裏。 Code-behind對我來說已經合理地工作了十多年了,而且我完全放棄了它。但是,在這一點上,我的實用主義讓我更加困難?

+0

我聽說你的代碼隱藏已經爲你服務了十多年了。 – 2011-02-08 18:04:48

+2

對於它的價值,這個事件應該在Silverlight 5中曝光(http://www.dotblogs.com.tw/kan/archive/2011/01/28/21097.aspx),雖然我確信這個現在是小舒適。 – RobSiklos 2011-02-08 20:50:34

回答

2

「但是我的實用主義在這一點上對我自己更難嗎?」 ?

我不會稱之爲實用主義。我會把它叫做對變化的恐懼;留在你的舒適區。如果你放棄舊的思維方式並接受新的生活(而且我確切地知道你的意思 - 我和你的代碼隱藏在同一條船上),生活實際上要容易得多。現在

,把我的香皂盒和一個更實際的答案:

當你想檢測發生在你的模型,然後勾到,讓您檢測模型變化的事件。 DataContext並不是真正的模型...所有的模型對象都將具有INotifyPropertyChanged的實現。您應該將其綁定到某個給定的模型,或者掛鉤到ObservableCollection類似的東西。

Silverlight/WPF讓所有這類東西更容易,現在數據綁定實際上工作

不要打架。不要把老ASP.Net的做法帶給你這個遊戲......它不會幫助你。您將以這種方式失去框架功能的最佳部分。

乾杯。

相關問題