天天看點

WPF 利用附加屬性建立FreezableCollection集合和反射實作控件參數以MVVM模式傳遞

本文中的例子本質上就是利用附加屬性傳遞附加對象,并在觀察者模式中使用反射技術實作指定名稱的事件參數傳遞。

本文中架構任然有很多問題,目前來說是勉強能用,有可以修改的地方盡管說!

我們知道附加屬性可以随意在控件上使用。

建立附加屬性時寫DependencyProperty的這一部分 ,并且需要使用Set__方法和Get__方法,其實不必要全部寫出也是可以,甚至都可以不用RegisterAttached方法。

因為xaml其實讀取Set__方法和Get__方法,包括依賴屬性(其實可以使用隻讀模式)哦,但是使用dependencyproperty這樣注冊是可以觸發屬性值變化的方法,同時也會省去某些麻煩的地方。

是以,我們就可以得到一個隻讀的附加屬性和一個觸發源。

不過剩下後續觸發的問題就會很嚴重了,

假如: A類是附加屬性,之中隻讀值為B類型,接受一個觸發源,并且B類型中也會有一個C類型,B類型會把反射事件的參數傳遞到C類中。

如此編寫代碼,是可以運作,并且是可以觸發,不過,C類在XAML是沒有辦法寫綁定的。

是以我們要變換一種方式,

在XAML有一個FreezableCollection集合是可以完美讓子元素使用綁定,不過子元素是必須繼承Animatable類。

不過我們有了集合,雖然可以直接在集合的某個某個時刻進行設定反射,但是有些浪費,是以編寫一個架構? 或者一個觀察者模式

WPF 利用附加屬性建立FreezableCollection集合和反射實作控件參數以MVVM模式傳遞

截圖

WPF 利用附加屬性建立FreezableCollection集合和反射實作控件參數以MVVM模式傳遞

更多 直接下載下傳代碼吧