前面講了最近本的兩種數據綁定,這次講講資源綁定和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