標籤:efi sele init xmlns ble 股票 update zh-cn tle
使用Windows Presentation Foundation (WPF) 可以很方便的設計出強大的使用者介面,同時 WPF提供了資料繫結功能。WPF的資料繫結跟Winform與ASP.NET中的資料繫結功能類似,但也有所不同,在 WPF中以通過後台代碼綁定、前台XAML中進行綁定,或者兩者組合的方式進行資料繫結。您可以繫結控制項、公用屬性、XML 或對象,WPF中的資料繫結跟WinForm與ASP.NET相比,更加快捷、靈活和簡單。
一、什麼是資料繫結
WPF 中的資料繫結,必須要有繫結目標和要繫結資料源。繫結目標可以是繼承自 DependencyProperty的任何可訪問的屬性或控制項,例如 TextBox 控制項的 Text 屬性。資料來源可以是其他控制項的屬性,可以是對象執行個體、XAML 元素、ADO.NET Dataset、XML資料。微軟針對XML綁定與對象綁定,提供了兩個輔助類XmlDataProvider 和 ObjectDataProvider。
WPF的資料繫結跟ASP.NET與WinForm中的資料繫結有什麼不同呢? 最大不同就是WPF使用{Binding …}這一語句。
Binding是用來實現介面控制項的屬性與後台資料之間的綁定,通過這種形式將前台介面與後台資料聯絡在一起達到介面與資料耦合的目的。
WPF綁定引擎從 Binding 對象擷取有關以下內容的資訊:
來源物件和目標對象。
資料流的方向。你可以通過設定 Binding.Mode 屬性來指定該方向。
值轉換器(如果存在)。你可通過將 Converter 屬性設定為用來實現 IValueConverter 的類的一個執行個體,指定值轉換器。
WPF與ASP.NET與WinForm中的綁定方式比較,存在著如下幾點差異:
(1)Binding可以通過XAML語句實現介面與資料的耦合。如果把Binding比作資料的橋樑,那麼它的兩端分別是Binding的源和目標。資料從哪裡來哪裡就是源,Binding是架在中間的橋樑,Binding目標是資料要往哪兒去。一般情況下,Binding源是邏輯層的對象,Binding目標是UI層的控制項對象,這樣,資料就會源源不斷 通過Binding送達UI層,被UI層展現,也就完成了資料驅動UI的過程。如。
(2)Binding有一個重要的屬性Mode,實現綁定中的資料流向。具體有如下幾種。
|
成員名稱 |
說明 |
|
Default |
使用繫結目標的預設 Mode 值。 每個依賴項屬性的預設值都不同。 一般情況下,使用者可編輯控制項屬性(例如文字框和複選框的屬性)預設為雙向繫結,而多數其他屬性預設為單向綁定。 確定依賴項屬性綁定在預設情況下是單向還是雙向的編程方法是:使用 GetMetadata 擷取屬性的屬性中繼資料,然後檢查 BindsTwoWayByDefault 屬性的布爾值。 |
|
OneTime |
當應用程式啟動或資料內容更改時,更新繫結目標。 此綁定類型適用於以下情況:使用目前狀態的快照適合使用的或資料狀態實際為靜態資料。 如果要從源屬性初始化具有某個值的目標屬性,並且事先不知道資料內容,則也可以使用此綁定類型。 此綁定類型實質上是 OneWay 綁定的簡化形式,在源值不更改的情況下可以提供更好的效能。 |
|
OneWay |
當繫結來源(源)更改時,更新繫結目標(目標)屬性。 此綁定類型適用於綁定的控制項為隱式唯讀控制項的情況。 例如,可以綁定到如股市代號之類的源。 或者,可能目標屬性沒有用於變更(例如表的資料繫結背景色)的控制項介面。 如果無需監視目標屬性的更改,則使用 OneWay 繫結模式可避免 TwoWay 繫結模式的系統開銷。 |
|
OneWayToSource |
當目標屬性更改時更新源屬性。 |
|
TwoWay |
導致對源屬性或目標屬性的更改可自動更新對方。 此綁定類型適用於可編輯表單或其他完全互動式 UI 方案。 |
(3)可通過配置觸發器,決定使用者在介面輸入的資料在什麼時候去修改資料來源中的值。可以通過UpdateSourceTrigger屬性實現,具體有如下幾種值
|
成員名稱 |
說明 |
|
Default |
繫結目標屬性的預設 UpdateSourceTrigger 值。 大多數依賴項屬性的預設值都為 PropertyChanged,而Text 屬性的預設值為 LostFocus。
確定依賴項屬性的預設 UpdateSourceTrigger 值的編程方法是使用 GetMetadata 來擷取屬性的屬性中繼資料,然後檢查 DefaultUpdateSourceTrigger 屬性的值。 |
|
Explicit |
僅在調用 UpdateSource 方法時更新繫結來源。 |
|
LostFocus |
當繫結目標元素失去焦點時,更新繫結來源。 |
|
PropertyChanged |
當繫結目標屬性更改時,立即更新繫結來源。 |
|
|
|
具體用法如下:
<TextBox Name="itemNameTextBox" Text="{Binding Path=ItemName, UpdateSourceTrigger=Explicit}" />
二、簡單的綁定
接下來是本文的第一個樣本,一個非常簡單的綁定樣本,該樣本示範如何通過綁定的方式把ListBox中選中的值顯示到 TextBlock中。
首先,給ListBox添加了七個 ListBoxItem,做為ListBox的選項 。
其次,把第二個 TextBlock 的 Text通過 Binding 與 ListBox 選擇項進行綁定。Binding 文法中的 ElementName 屬性指示 TextBlock 的 Text 屬性要與其綁定的控制項的名稱。Path 屬性指示我們將綁定到Text屬性上ListBox元素的屬性。具體代碼如下。
<Window x:Class="WpfApp1.WindowBindData" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="WindowBindData" Height="400" Width="500"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="150"/> <RowDefinition Height="150"/> <RowDefinition Height="138*"/> </Grid.RowDefinitions> <StackPanel Grid.Row="0"> <TextBlock Width="248" Height="24" Text="股票名稱:" TextWrapping="Wrap"/> <ListBox x:Name="listStockName" Width="248" Height="56"> <ListBoxItem Content="全通教育"/> <ListBoxItem Content="大智慧"/> <ListBoxItem Content="寶鋼股份"/> <ListBoxItem Content="浦發銀行"/> <ListBoxItem Content="工商銀行"/> <ListBoxItem Content="中國建築"/> <ListBoxItem Content="中國南車"/> </ListBox> <TextBlock Width="248" Height="24" Text="你所選中的股票名稱:" /> <TextBlock Width="248" Height="24" Text="{Binding ElementName=listStockName, Path=SelectedItem.Content}"> </TextBlock> </StackPanel> </Grid> </Window>
效果如。
WPF入門教程系列十五——WPF中的資料繫結(一)