1. 程式人生 > >WPF學習(4)-依賴屬性上

WPF學習(4)-依賴屬性上

  還是先來一個例子

<RadioButton  Name="RB1" Content="RadioButton" HorizontalAlignment="Left" Margin="102,88,0,0" VerticalAlignment="Top"/>
        <ComboBox IsEnabled="{Binding ElementName=RB1, Path=IsChecked}" HorizontalAlignment="Left" Margin="115,168,0,0" VerticalAlignment="Top" Width="120">
            <ComboBoxItem>張三</ComboBoxItem>
            <ComboBoxItem>李四</ComboBoxItem>
            <ComboBoxItem>王五</ComboBoxItem>
        </ComboBox>

       當RadioButton選中之後,combox的isenable設定為true,如果是原來的做法,肯定是RadioButton ischecked事件,當觸發這個事件後,檢視ischecked的狀態,然後對應修改combox的isenable,當然也沒有問題,但是這樣就有一個問題,明明這個只是介面的邏輯卻放在了後臺用C#去實現,程式碼量會變多,而且邏輯不清。

        在wpf中,直接一句IsEnabled="{Binding ElementName=RB1, Path=IsChecked}"就可以搞定了,非常簡潔明瞭。

        依賴屬性,定義可以簡單理解為,屬性值本身沒有值,而是依賴於別的屬性,比如我們例子中的combox的isenable並沒有給定值,而是依賴於RadioButton,這樣看來,應該是很好理解,也非常簡單了。

        比如上面這個圖,有一個基類,叫定位物件,定位物件有兩個派生類,警察和犯人,警察有兩個派生類,法警和獄警,獄警又有兩個派生類,一個監區獄警,一個辦公樓獄警。

       定位物件有一個屬性叫做工作單位,那麼下面繼承的警察,法警,獄警,監區獄警,辦公樓獄警,都會繼承這個辦公單位屬性,但是我們的定位系統是部署在區域網的,而且監獄又不可能上外網,那麼這些人的工作單位都是一樣的,可是我們每new一個物件出來,都會開闢空間來儲存這個工作單位,這個是大大的浪費,於是依賴屬性就應運而生了,依賴屬性的誕生最初就是為了解決繼承膨脹的問題。

     在上面這個例子,我們就可以使用依賴屬性,定位物件的工作單位就設計成依賴屬性,那麼他的子類,孫子類,重孫子類,只要你不去給這個屬性賦值,那麼他們都依賴於這個基類的屬性值,比如我們給定base類的預設值是鄭州市監獄,那麼後面new出來的所有警察物件,工作單位都是鄭州市監獄,而且是不開闢空間去儲存的。

        具體如何實現,在依賴屬性中裡面會詳細介紹。