WPF簡單教程:數據綁定

有人不喜歡WPF人爲WPF是一種落後的技術,畢竟WPF已經是一種擁有十多年曆史的古老技術了。
但是,我覺得WPF技術並不老,在他所處的那個時代,WPF無疑是一種十分超前的技術。直到現在,WPF與他的後繼者UWP依然算是一種先進的界面類庫。

WPF的數據綁定

WPF是一種數據驅動的界面技術,不同於傳統的以控件爲核心的界面類庫,WPF以數據呈現爲中心。我的理解:WPF界面操作的核心並不是控件的操作,而是對於數據的操作。WPF的核心基礎是數據綁定,當界面呈現於獨立於界面的數據綁定在一起之後,我們只需要操作後臺數據,前端界面上的信息就會隨之更新。
很多界面類庫中都有類似的設計。例如Java Swing類庫中的JListModel,Android中的ViewPager,它們獨立出一個模型的概念,模型的數據更新之後,會反應到界面呈現之上。但是他們的設計都不算徹底,WPF中可以綁定任何數據類型就算是複雜的item控件也只需要一個list集合就能搞定。如同WPF這麼徹底的在底層重構,完全的支持數據綁定的類庫,僅此而已。WPF中的數據綁定已經進入了一種瘋魔的地步,任何細節都希望能夠利用數據綁定來進行處理。

  • 資源Resource
  • 命令Command
  • 樣式Style
  • 元素Element
  • 觸發器Tigger
  • 模板template

WPF的數據綁定簡直喪心病狂,我只簡單的介紹這些比較基礎的問題,更詳細信息各位可以去看參看書。

資源綁定

任何元素都可以綁定資源,資源是一種可以複用的元素,在不同的元素中共享同一種資源能夠有效的降低編程量,提高工作效率。
在window中綁定資源

    <Window.Resources>
        <DataTemplate x:Key="BranchItemTemplate">
            <Grid Height="Auto" Width="Auto" Margin="5">
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition Width="202*"/>
                </Grid.ColumnDefinitions>
                <Rectangle Fill="#FFF4F4F5" Stroke="Black" Grid.ColumnSpan="3" RadiusX="8" RadiusY="8" Grid.RowSpan="2"/>
                <TextBlock TextWrapping="Wrap" Text="{Binding Path=BranchName}" Grid.ColumnSpan="3" Margin="10,5"/>
                <TextBlock TextWrapping="Wrap" Text="{Binding Path=ItemID}" Grid.ColumnSpan="3" Margin="10,5" Grid.Row="1"/>
                <TextBlock Grid.Row="2" TextWrapping="Wrap" Text="Static?"/>
                <TextBlock Grid.Row="2" TextWrapping="Wrap" Text="{Binding Path=StaticV}" Grid.Column="1"/>
                <TextBlock Grid.Column="2" Grid.Row="2" TextWrapping="Wrap" Text="{Binding Path=Animation}"/>
            </Grid>
        </DataTemplate>
    </Window.Resources>

上例在window中綁定了一個數據模板,這個模板是應用在listbox中的itemtemplate,當綁定的對象有數據的時候,listbox就會利用此模板格式化每一個條目中的數據,並呈現在listbox的item區域中。使用他的時候只需要在listbox的聲明中指明itemtemplate,在初始化代碼中關聯list對象到listbox的itemsource屬性即可。如此即可自動的展示整個list容器中的數據信息了。
此例中datatemplate就是一種資源,一種模板資源,使用的時候需要通過x:key引用。

樣式的綁定

樣式的綁定一上文類似,可以採用資源聲明的方式,將樣式聲明爲一個共享資源,另外樣式有一個比較有意思的地方,那就是,如果樣式沒有提供x:key屬性,那麼他就是一種默認樣式,針對Button聲明的默認樣式將統一格式化整個界面中的所有樣式。當存在多個默認樣式的時候,元素的樣式會被重複設定,最終的結果是一種混雜,每個屬性都保留最後一次的設定值。

命令的綁定

<Window.CommandBinding>
    <CommandBinding Command="CommandClass.StaticCommand" Executeed="ExecuteMethod"></CommandBinding>
</Window.CommandBinding>

命令的綁定同樣是任何元素都可以,爲了通用型一般選擇Window元素。命令綁定的內部原理是“多對一”形式的綁定,這個綁定中命令採用了static屬性的方式,非常巧妙的實現了唯一性。在整個系統的運行中,命令的執行操作被委託到了Window類中的私有方法上。

元素的綁定

XX屬性="{Binding Element xxxx_Property , Path=ssss}"

……
各種綁定的花樣還是很多的,我就不一一介紹了,尤其是綁定套綁定,動態條目的綁定,觸發器和動畫等等。如果有需要的化,大家可以自行看參考書。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章