日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

WPF之Binding(转)

發(fā)布時(shí)間:2024/1/17 asp.net 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WPF之Binding(转) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

WPF之Binding

Binding即綁定,聽(tīng)上去像一個(gè)音譯詞,很有趣,我們生活中常用的類(lèi)似還有一個(gè)詞,叫want to,我們叫妄圖,只不過(guò)略加了感情色彩,扯遠(yuǎn)了,回到正題說(shuō)綁定。

感覺(jué)這個(gè)東西在WPF中的處于核心位置,他就像一座橋梁,把我們要處理的UI、邏輯數(shù)據(jù)聯(lián)系到了一起,也正因?yàn)樗?#xff0c;使得我們的開(kāi)發(fā)理念從UI驅(qū)動(dòng)轉(zhuǎn)向了數(shù)據(jù)驅(qū)動(dòng),使我們能夠更專(zhuān)注于業(yè)務(wù)邏輯。

既然說(shuō)Binding像橋梁,我們就來(lái)說(shuō)說(shuō)橋的兩端,以及他們是如何聯(lián)系的。

我們把這座橋的兩端分別叫做Source(源)和Target(目標(biāo)),當(dāng)然哪端是源,哪段是目標(biāo)都是可以相互轉(zhuǎn)化的,還可能是雙向的。

1.Source的范圍非常廣,凡是可以封裝數(shù)據(jù),并且通過(guò)屬性的方式暴露出來(lái)的都可以作為源

2.Target就有一定的限制,因?yàn)榻壎ㄖ荒芙壎ǖ侥繕?biāo)的依賴(lài)屬性上,所以說(shuō)只有DependcyObject對(duì)象才可以是綁定的對(duì)象

常用的指定方式

1.普通的CPR對(duì)象

2.CLR集合 包括數(shù)組 List 一般是把集合數(shù)據(jù)指定給Item Control類(lèi)的Item Source充當(dāng)數(shù)據(jù)源

3.ADO.Net對(duì)象 包括DataTable DataView

4.DataProvider 這其中包括XmlDataProvider和ObjectDataProvider,DataProvider是實(shí)現(xiàn)了INotifyPropertyChanged接口的類(lèi),所以可以做到及時(shí)通知

5.DependcyObject 依賴(lài)對(duì)象不但可以做為綁定目標(biāo),也可以做源

6.LINQ

7.指定源的時(shí)候還可以通過(guò)ElementName用于XAML代碼中不能訪問(wèn)UI對(duì)象的時(shí)候 RelativeSource用于相對(duì)自身的時(shí)候

指定方法

通過(guò)BindingOperations.SetBinding(DependencyObject Target,DependencyProperty db,Binding binding)方法,第一個(gè)參數(shù)表示綁定到哪個(gè)對(duì)象上,第二個(gè)參數(shù)表示綁定到對(duì)象的哪個(gè)屬性上,第三個(gè)參數(shù)表示應(yīng)用哪個(gè)綁定

Binding對(duì)象有這么幾個(gè)重要屬性

Source綁定源 可以為空 為空的時(shí)候表示取當(dāng)前對(duì)象的DataContext屬性(可以繼承自父容器)

Path 源的哪個(gè)屬性 為空的時(shí)候表示源本身就是數(shù)值

Mode 是BindingMode類(lèi)型的枚舉 控制數(shù)據(jù)流向

UpdateSourceTrigger UpdateSourceTrigger類(lèi)型的枚舉 控制更新的時(shí)機(jī)

當(dāng)綁定對(duì)象為FrameworkElement類(lèi)型的時(shí)候,綁定方法可以是SetBinding(DependcyProperty dp,Binding binding)因?yàn)樽隽朔庋b,BindingOperations.SetBinding方法的第一個(gè)參數(shù)設(shè)為this

下面是兩個(gè)DataProvider作為源的例子

XMLProvider寫(xiě)在窗體Resurce中

XMLProvider寫(xiě)在窗體Resurce中

<Window x:Class="DataProviderBindingPractise.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="205" Width="300">
<Window.Resources>
<XmlDataProvider x:Key="xmlPro" Source="XMLFile1.xml" XPath="Data/Student"></XmlDataProvider>
</Window.Resources>
<StackPanel>
<ListView x:Name="lvStu" Height="130" Margin="5" ItemsSource="{Binding Source={StaticResource xmlPro}}">
<ListView.View>
<GridView>
<GridViewColumn Header="Id" Width="80" DisplayMemberBinding="{Binding XPath=@Id}"/>
<GridViewColumn Header="Name" Width="80" DisplayMemberBinding="{Binding XPath=Name}"/>
<GridViewColumn Header="Age" Width="80" DisplayMemberBinding="{Binding XPath=Age}"/>
</GridView>
</ListView.View>
</ListView>
<!--<Button x:Name="btnLoad" Height="25" Margin="5,0" Click="btnload_Click"/>-->
</StackPanel>
</Window>

也可以寫(xiě)在CodeBehinde中

View Code

void InitList()
{
XmlDataProvider xdp = new XmlDataProvider();
xdp.Source = new Uri(@"http://www.cnblogs.com/XMLFile1.xml", UriKind.Relative);
xdp.XPath = @"Data/Student";

this.lvStu.DataContext = xdp;
this.lvStu.SetBinding(ListView.ItemsSourceProperty, new Binding());
}

ObjectDataProvider

1.Calculator具體類(lèi)

1.Calculator具體類(lèi)

class Calculator
{
public string Add(string arg1, string arg2)
{
double x = 0;
double y = 0;
if (double.TryParse(arg1, out x) && double.TryParse(arg2, out y))
{
return (x + y).ToString();
}
else
{
return "Input Error";
}
}
}

綁定對(duì)象

綁定對(duì)象

//ObjectDataProvider作為數(shù)據(jù)源
private void SetCalculatorBinding()
{
ObjectDataProvider odb = new ObjectDataProvider();
odb.ObjectInstance = new Calculator();
odb.MethodName = "Add";
odb.MethodParameters.Add("0");
odb.MethodParameters.Add("0");

Binding binding1 = new Binding("MethodParameters[0]")
{
Source = odb,
BindsDirectlyToSource = true,
UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged
};

Binding binding2 = new Binding("MethodParameters[1]")
{
Source = odb,
BindsDirectlyToSource = true,
UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged
};

Binding binding3 = new Binding(".") { Source=odb };

txt1.SetBinding(TextBox.TextProperty, binding1);
txt2.SetBinding(TextBox.TextProperty, binding2);
txt3.SetBinding(TextBox.TextProperty, binding3);

}

?ps.今天問(wèn)了下項(xiàng)目組長(zhǎng)現(xiàn)在項(xiàng)目的開(kāi)發(fā)模式,畢竟初來(lái)乍到,對(duì)開(kāi)發(fā)方式不了解的話,適應(yīng)起來(lái)很慢,就顯得非常不好了。問(wèn)的結(jié)果讓我松了一口氣,因?yàn)轫?xiàng)目現(xiàn)在還沒(méi)有使用MVVM的開(kāi)發(fā)模式,還是事件委托的方式,這就跟ASP.Net差不多了,只是前臺(tái)界面的方式不一樣。我的目標(biāo)是盡快掌握各種方法,然后再選一個(gè)方向深入研究,在這個(gè)百家爭(zhēng)鳴的時(shí)代,不多了解一些,難免顯得眼界不夠開(kāi)廣。

轉(zhuǎn)載于:https://www.cnblogs.com/LiZhongZhongY/p/10896728.html

總結(jié)

以上是生活随笔為你收集整理的WPF之Binding(转)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。