WPF資料繫結(二)
阿新 • • 發佈:2019-01-28
前面講了最近本的兩種資料繫結,這次講講資源繫結和Context繫結
1、資源繫結
同樣不需要寫程式碼,僅僅需要配置XAML就可以了。
1 <TabItem Header="ResourceBinding"> 2 <StackPanel> 3 <StackPanel.Resources> 4 <sys:String x:Key="string1">this is a static string resource</sys:String> 5 </StackPanel.Resources> 6 <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding Source={StaticResource string1}}" /> 7 <TextBlock Text="{Binding Path=Name, RelativeSource={RelativeSource AncestorLevel=2, Mode=FindAncestor, AncestorType={x:Type Grid}}}" /> 8 </StackPanel> 9 </TabItem>
其中第六行中Textblock的Text屬性就是針對靜態屬性的繫結。繫結的時一個字串資源,資源的定義在第四行。
第七行的TextBlock是什麼繫結呢?這個叫相對資源繫結,前面的靜態資源是絕對資源,比如我們在例子中用到的字串就是stackpanel的一個資源,他的“位置”,從屬關係是絕對的。
而相對資源是以當前空間為出發點的相對位置,比如說在例子中的繫結的資源就是相對於該TextBlock的外圍的Grid的控制元件的的Name屬性。
重點是下面這句話:
RelativeSource={RelativeSource AncestorLevel=2, Mode=FindAncestor, AncestorType={x:Type Grid}}
AncestorLevel這個是相對的控制元件的偏移量,從1開始,每層向外加1,Mode是找尋的模式,這裡的FindAncestor時說找祖先(Ancestor意為祖先),就是說找父控制元件,即外層的空件。AncestorType就是要找哪類控制元件。
2、Context繫結
同樣不需要寫程式碼
1 <TabItem Header="context binding"> 2 <StackPanel> 3 <StackPanel.DataContext> 4 <local:Student Id="15" Name="Jean" Age="18"/> 5 </StackPanel.DataContext> 6 <TextBlock Text="{Binding Id}"/> 7 <TextBlock Text="{Binding Name}"/> 8 <TextBlock Text="{Binding Age}"/> 9 </StackPanel> 10 </TabItem>
我們原本定義了一個student類,現在給Stackpanel類設定一個DataContext,一個學生類。
同時讓TextBlock類的控制元件來繫結的顯示該學生類的資訊。
顯示效果如下:
當然我們也可以使用程式碼來實現,將StackPanel類設定為一個學生類。效果是一樣的
程式碼下載:
https://github.com/Dothegod/WPF_Training_Sample