程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> WPF綁定實例詳解

WPF綁定實例詳解

編輯:C#入門知識

WPF綁定實例詳解。本站提示廣大學習愛好者:(WPF綁定實例詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是WPF綁定實例詳解正文


本文具體講述了WPF綁定的用法,分享給年夜家供年夜家參考。詳細用法剖析以下:

1.WPF綁定應用的源屬性必需是依附項屬性,這是由於依附項屬性具有內置的更改告訴支撐,元素綁定表達式應用了Xaml擴大標志,WPF綁定一個控件是應用Binding.ElementName,綁定非控件對象時應用Source,RelativeSource,DataContext屬性(WPF特有,而非XAML),只能綁定對象的共有字段.
下邊是部門Binding 屬性名,完全列表參考 :http://msdn.microsoft.com/zh-cn/library/vstudio/ms750413.aspx

① Source:數據供給者
② RelativeSource:依據以後對象為基本,主動查找源並綁定
③ DataContext:假如未應用Source和RelativeSource,WPF就從以後控件開端在控件樹種向上查找,並應用第一個非空的DataContext屬性,可以在更高條理容器對象上設置DataContext,以下代碼 Text 綁定到 Source屬性,但未設置Text的綁定對象,會向上查找DataContext綁定的對象的Source屬性
④ 示例代碼:

<StackPanel DataContext="{X:Static SystemFonts.IconFontFamily}"> 
    <TextBox Margin="5" Text="{Binding Path=Source}">
    </TextBox> 
</StackPanel>
<TextBlock Margin="3" Name="lblSampleText" 
FontSize="{Binding ElementName=sliderFontSize,Path=Value Mode="TwoWay"}"
Text="{Binding ElementName=txtContent,Path=Text}" Foreground="{Binding ElementName=lstColors,Path=SelectedItem.Tag}" ></TextBlock>

也可是應用代碼創立綁定:

Binding binding = new Binding();
 binding.Source = sliderFonSize;  
 binging.path=new PropertPath("Value") 
 binding.Mode=BindignMode.TwoWay;
 txt.SetBinding(TextBlock.FontSize,binding)

2.BindingMode的列舉值有:

① OneWay
② TwoWay
③ OneTime:依據源端屬性值設置目的屬性值,以後的轉變會被疏忽,除非挪用BindingExpression.UpdateTarge辦法
④ OneWayToSource:與OneWay相似,但偏向相反,用於目的屬性長短依附項屬性的情形
⑤ Default:默許值,依據目的屬性肯定綁定類型.依附項屬性都由一個元數據 FrameworkPropertyMetadata.BindsTwoWayByDefault用於標識oneway綁定照樣twoway綁定

3.從目的到綁定源端數據更新時(binding mode為twoway或許onewaytosource),更新行動(甚麼機會更新)由Binding.UpdateSourceTrigger列舉屬性掌握,UpdateSourceTrigger的值有:

① PropertyChanged:目的屬性產生變更時立刻更新

② LostFocus:目的屬性產生變更而且目的喪失核心時更新源

③ Explicit:除非挪用BindingExpression.UpdateSource()辦法,不然沒法更新

④ Default:依據目的屬性的元數據(FrameworkPropertMetadata.DefaulUpdateSourceTrigger)肯定更新行動,年夜多半屬性默許行動是PropertyChanged

4.MultiBinding:將多個對象綁定到一個控件,重要要應用StringFormat

<ListBox ItemsSource="{StaticResource MyData}"> 
<ListBox.ItemTemplate> 
<DataTemplate> 
<TextBlock>
<TextBlock.Text> 
<MultiBinding StringFormat="{}{0} -- Now only {1:C}!">
<Binding Path="Description"/> <Binding Path="Price"/> </MultiBinding> 
</TextBlock.Text> 
</TextBlock> 
</DataTemplate>
</ListBox.ItemTemplate> 
</ListBox>

5.ObjectDataProvider:從另外一個類中獲得信息,只用於數據查詢,IsAsynchronous=true,可使ObjectDataProvider在後台履行,如許即便產生異常不會影響綁定控件的顯示:

<ObjectDataProvider x:Key="productsProvider" ObjectType="{x:Type local:StoreDB}"
MethodName="GetProducts"></ObjectDataProvider>

6.WPF中派生自ItemsControl的類都能顯示列表,可以或許支撐聚集數據綁定的元素包含ListBox,ComboBox,ListView和DataGrid,Menu,Treeview,ItemsControl中有三個主要屬性:

① ItemsSource: 指向一個聚集,聯合必需支撐IEnumerable接口,該聚集包括將在列表中顯示的一切元素,但根本的IEnumerable接口只支撐只讀綁定,要使修正能直接反響到綁定的控件上須要應用ObservablCollection類
② DisplayMemberPath:肯定用於顯示的 對象的屬性,假如未設置 則會顯示對象的ToString()辦法前往的值
③ ItemTemplates:接收一個數據模板,用於為每一個項創立可視化外不雅

7.繼續自IEnumerable接口的類型都支撐綁定到列表形元素,年夜多半聚集類沒有繼續INotifyCollectionChanged接口,WPF供給了一個應用INotifyCollectionChanged接口的聚集,ObservableCollction類

8.將Grid綁定到lstProducts對象的SelectItem屬性

<Grid DataContext="{Binding ElementName=lstProducts,Path=SelectedItem}">....</Grid>

9.綁准時,被綁定的數據對象能夠還不存在(綁定控件對象時可以看該對象在xaml中能否曾經界說),這時候仍然可以在Xaml中綁定對象類屬性(Binding Path),然後在代碼中生成數據對象後在與控件綁定

10.WPF列表控件供給了UI虛擬化(UI Virtualization)功效用於進步年夜列表的機能,UI虛擬化是列表僅為以後顯示項創立容器對象的一種技巧

11.數據驗證:用於捕捉不法數據

① ExceptionValidationRule驗證:驗證掉敗時,WPF會在綁定元素大將Validation.HasError設置為True,WPF主動將控件應用的模板切換到又Validation.ErrorTemplate界說的模板,創立包括毛病細節的ValidationError對象,並加到Validation.Errors聚集中,假如Binding.NotifyOnValidationError屬性設置為True,WPF就會在控件上激發Validation.Error事宜

② IDataErrorInfo類:在數據對象中激發毛病,而且要在binding中設置DataErrorValidationRule驗證規矩,當修正了一個屬性後,IDataErrorInfo中的字符串索引器,以屬性名為Key對值停止驗證。可以自界說驗證類並呼應驗證毛病

12.沒有Path的Binding:Binding源自己就是數據且不須要Path來指明,以下綁定表現將Text綁定到字符串類型mystring,mystring自己就是數據.Path後為"."或許空表現綁定source自己:

<TextBlock Text="{Binding source={StaticResource ResourceKye=mystring},Path=.}">

信任本文所述對年夜家C#法式設計的進修有必定的自創價值。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved