1. 程式人生 > >WPF資料繫結(二)

WPF資料繫結(二)

前面講了最近本的兩種資料繫結,這次講講資源繫結和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