国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C# - WPF快速入門教程之綁定Binding

WPF快速入門教程之綁定Binding

2022-03-02 14:19奇葩史 C#

初學wpf,經常被Binding搞暈,以下記錄寫Binding的基礎。下面這篇文章主要給大家介紹了關于WPF快速入門教程之綁定Binding的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下

綁定(binding)元素介紹

首先,盜用張圖。這圖形象的說明了binding的機理。

WPF快速入門教程之綁定Binding

此處主要介紹的綁定類是system.windows.data.binding,如果涉及其他內容,將簡要介紹,不會過多說明。

下面將簡要介紹最基礎(最常用)的三個屬性:

1、path —— 路徑,用于索引到具體的屬性,常常會省略書寫,示例如下:

?
1
<textbox text="{binding path=a.b}" />

其中path=可以省略,因為binding元素含有一個帶參構造函數,其參數為path。另外,示例中a.b需具體到屬性,如果a已經是需要綁定的具體屬性,則可以用a替換a.b。即最簡單的格式是:

?
1
<textbox text="{binding a}" />

2、mode —— 模式,用于指定數據的更新方向,它是一個枚舉類型,共有一下四種方式:

  • onetime —— 一次性更新(只更新一次),從數據源更新到當前使用的綁定屬性。
  • oneway —— 單向更新,從數據源更新到當前使用的屬性。
  • onewaytosource —— 單向更新,從當前使用的屬性更新到數據源。
  • twoway —— 雙向更新,當前屬性與數據源同步。

注:如果未指定,即表示使用默認模式,而在不同的依賴屬性上,其模式是不一樣的。在使用時,如果不確定其默認模式是否是自己需要的模式時,則可以手動指定。

3、updatesourcetrigger —— 數據源更新觸發器,用于指定控件上的屬性值什么時候更新到數據源,它也是個枚舉類型,有以下三種方式:

  • explicit —— 顯示更新,需要調用updatesource方法后才能更新。
  • lostfocus —— 失去焦點更新
  • propertychanged —— 屬性值改變更新,大部分情況會使用此方式,但有時頻繁的更新數據源會降低效率,如在textbox中,如果數據源有較多的數據驗證,此時在輸入text時,就有可能出現界面卡頓的情況。

注:當然,此處也有默認值設置,但不同的控件 屬性的 默認 值也不一樣,不過大部分情況下默認 值是propertychanged,比較特殊的有textbox的text屬性,其默認值是lostfocus。

下面給一個最常用的綁定書寫方式:

?
1
<textbox text="{binding a,updatesourcetrigger=propertychanged,mode=twoway}" />

控件綁定

控件綁定,即在同一個界面中不同控件之間的數據同步處理,最常見的就是滑動條與一個文本框之間的綁定。在控件綁定中,需要指定綁定類的elementname屬性值,即當前屬性綁定到哪一個控件的屬性上。示例如下:

?
1
2
<slider name="slider" maximum="100" />
<textbox text="{binding elementname=slider,path=value,updatesourcetrigger=propertychanged,mode=twoway}" />

注:在wpf開發中,我們常常是不為控件設置name值的,而在控件綁定中,必須為源控件添加name屬性值;而有些控件可能會不含有name屬性,此時則使用x:name來指定名稱。

在控件綁定中有一個比較特殊的存在——模板綁定-templatebinding,它與binding并不在一個繼承結構上。templatebinding是用在控件模板定義中的,用于綁定模板對應控件中的屬性,示例如下:

?
1
2
3
4
5
6
7
<textbox x:name="templatebinding">
 <textbox.template>
  <controltemplate targettype="textbox">
   <textblock text="{templatebinding text}" />
  </controltemplate>
 </textbox.template>
</textbox>

templatebinding可以簡單理解為在binding中設置了elementname為其父級控件 —— 事實并非如此,僅作為輔助理解。templatebinding相對與binding要少很多屬性內容。

數據綁定

此處數據綁定表示在wpf中的對象綁定,即常見場景 就是把數據庫 數據顯示到 界面上。而在真實的項目開發中 ,常 會用到mvvm模式,數據綁定將會在那里體現出來,但mvvm模式開發則不在此節中敘述。

下面以一個最簡單的示例解釋數據綁定:

后臺類 —— 數據源結構:

?
1
2
3
4
class fordatabinding
{
 public int count { get; set; }
}

數據源初始化 —— 創建數據并將數據綁定到界面:

?
1
2
3
fordatabinding data = new fordatabinding();
data.count = 10;
this.fordatabinding.datacontext = data;

界面控件設置 —— 指定控件綁定到源數據的哪個屬性:

?
1
2
3
<grid x:name="fordatabinding">
 <textbox text="{binding count}" />
</grid>

其中設置了grid的datacontext,即表示grid內部數據上下文是以設置的數據源為基礎,在此示例中,text屬性綁定的count就是以fordatabinding類對象為基礎查找屬性。 —— 即綁定路徑是以當前位置以樹形結構往下查找對應屬性。

其他元素

binding除了以上內容,還有其他的屬性設置,本小節將簡要介紹幾個較為常用的內容。

數據格式化轉換

在數據綁定中,有時我們需要顯示的數據與源數據不一樣,如時間格式,浮點數格式,或者更復雜一些的想要一個類對象中的多個屬性組合一起顯示。

對于簡單的數據格式化,可以通過stringformat來處理,如時間格式化為yyyy-mm-dd,浮點數保留兩位小數等等。其代碼示例如下:

后臺類:

?
1
2
3
4
5
class simpledataconvert
{
 public datetime date { get; set; } = datetime.now;
 public float price { get; set; } = 100.123456f;
}

使用:

?
1
this.simpleconvert.datacontext = new simpledataconvert();

界面處理:

?
1
2
3
4
<stackpanel x:name="simpleconvert">
 <textbox text="{binding date,stringformat=yyyy-mm/dd}" />
 <textblock text="{binding price,stringformat=f2}" />
</stackpanel>

上述示例結果就是將date日期格式化為yyyy-mm/dd;將price保留兩位小數顯示。

但是有些數據顯示要求無法通過stringformat處理,則需要使用binding的屬性converter來處理了 —— 即通過值轉換器來處理。下面我們以上面用到的時間轉化為例,假如我們要在前臺顯示yyyymmdd格式的日期,此時從數據源顯示到界面可以正確處理,但是在界面輸入,它無法正確轉化為源數據,即內置的converter不支持,此時我們就需要自己實現值轉換,示例 如下:

首先定義dateconverter,實現接口ivalueconverter,代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
class dateconverter : ivalueconverter
{
 /// <summary>
 /// 數據源轉界面顯示
 /// </summary>
 /// <param name="value"></param>
 /// <param name="targettype"></param>
 /// <param name="parameter"></param>
 /// <param name="culture"></param>
 /// <returns></returns>
 public object convert(object value, type targettype, object parameter, cultureinfo culture)
 {
  if (value.gettype() == typeof(system.datetime))
  {
   return ((system.datetime)value).tostring("yyyymmdd");
  }
  else
  {
   return value;
  }
 }
 
 /// <summary>
 /// 界面顯示轉數據源
 /// </summary>
 /// <param name="value"></param>
 /// <param name="targettype"></param>
 /// <param name="parameter"></param>
 /// <param name="culture"></param>
 /// <returns></returns>
 public object convertback(object value, type targettype, object parameter, cultureinfo culture)
 {
  if (targettype == typeof(system.datetime) && value != null)
  {
   datetime dt = datetime.now;
   string valuestr = value.tostring();
   if (datetime.tryparse(valuestr, out dt))
   {
    return dt;
   }
   else if (valuestr.length == 8)
   {
    string yearstr = valuestr.substring(0, 4);
    string monthstr = valuestr.substring(4, 2);
    string daystr = valuestr.substring(6, 2);
    if (datetime.tryparse(string.format("{0}-{1}-{2}", yearstr, monthstr, daystr), out dt))
    {
     return dt;
    }
   }
  }
  return value;
 }
}

然后在xaml文件中添加引用:

由于此處dateconvert直接定義在當前窗體類命名空間下,所以其已經默認添加了如下空間,如果定義在其他位置,則需要手動添加空間引用。

?
1
xmlns:local="clr-namespace:binding_demo"

資源定義,以便于在控件中引用

?
1
2
3
<window.resources>
 <local:dateconverter x:key="dateconvert" />
</window.resources>

最后,則將值轉換器應用到控件上,代碼如下:

?
1
<textbox text="{binding date,converter={staticresource dateconvert}}" />

至此,一個簡單的值轉換器就完成了。

數據驗證

在綁定中的驗證主要設計四個屬性:

  • validatesondataerrors或者validatesonnotifydataerrors(wpf 4.5之后才有的)—— 與dataerrorvalidationrule或notifydataerrorvalidationrule組合使用
  • validatesonexceptions —— 與exceptionvalidationrule組合使用
  • notifyonvalidationerror —— 控制是否觸發validation.error事件,用于額外的內容處理
  • validationrules —— 驗證規則,用于定義驗證規則集合

下面我們以異常驗證規則來簡要介紹驗證規則的使用 —— 驗證處理涉及的內容有很多,單此一節無法描述完整,故僅列舉最簡單的使用方式:

首先是后臺類的定義:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class forexceptionvalidate
{
 private int max;
 public int max
 {
  get { return max; }
  set
  {
   if (value > 100)
   {
    throw new exception("max不能超過100");
   }
   max = value;
  }
 }
}
 
this.forvalidate.datacontext = new forexceptionvalidate();

然后是界面使用:

?
1
2
3
4
5
6
7
8
9
10
11
<stackpanel x:name="forvalidate">
 <textbox >
  <textbox.text>
   <binding path="max" >
    <binding.validationrules>
     <exceptionvalidationrule></exceptionvalidationrule>
    </binding.validationrules>
   </binding>
  </textbox.text>
 </textbox>
</stackpanel>

在此 示例 中,后臺類中拋出的異常,會作為界面的驗證結果來處理 —— 所以此處雖然沒有明確使用異常捕獲,但程序并 不會崩潰。

依賴屬性

最后,簡要說下依賴屬性,所有上面的綁定基礎都需要靠依賴屬性。所有需要綁定功能的屬性都進行了對應依賴屬性(system.windows.dependencyproperty)定義。在wpf中,我們大部分時間是在用依賴屬性 —— 各種綁定,而自己的定義依賴屬性的情況相對較少,所以此處就不再介紹如何定義依賴屬性 —— 作為入門介紹教程。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:http://www.shisujie.com/blog/Binding

延伸 · 閱讀

精彩推薦
  • C#深入解析C#中的交錯數組與隱式類型的數組

    深入解析C#中的交錯數組與隱式類型的數組

    這篇文章主要介紹了深入解析C#中的交錯數組與隱式類型的數組,隱式類型的數組通常與匿名類型以及對象初始值設定項和集合初始值設定項一起使用,需要的...

    C#教程網6172021-11-09
  • C#C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    這篇文章主要介紹了C# 實現對PPT文檔加密、解密及重置密碼的操作方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下...

    E-iceblue5012022-02-12
  • C#C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    這篇文章主要介紹了C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題,簡單描述了訪問者模式的定義并結合具體實例形式分析了C#使用訪問者模式解決長...

    GhostRider9502022-01-21
  • C#C#實現XML文件讀取

    C#實現XML文件讀取

    這篇文章主要為大家詳細介紹了C#實現XML文件讀取的相關代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    Just_for_Myself6702022-02-22
  • C#Unity3D實現虛擬按鈕控制人物移動效果

    Unity3D實現虛擬按鈕控制人物移動效果

    這篇文章主要為大家詳細介紹了Unity3D實現虛擬按鈕控制人物移動效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一...

    shenqingyu060520232410972022-03-11
  • C#C#裁剪,縮放,清晰度,水印處理操作示例

    C#裁剪,縮放,清晰度,水印處理操作示例

    這篇文章主要為大家詳細介紹了C#裁剪,縮放,清晰度,水印處理操作示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    吳 劍8332021-12-08
  • C#WPF 自定義雷達圖開發實例教程

    WPF 自定義雷達圖開發實例教程

    這篇文章主要介紹了WPF 自定義雷達圖開發實例教程,本文介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下...

    WinterFish13112021-12-06
  • C#C#通過KD樹進行距離最近點的查找

    C#通過KD樹進行距離最近點的查找

    這篇文章主要為大家詳細介紹了C#通過KD樹進行距離最近點的查找,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    帆帆帆6112022-01-22
主站蜘蛛池模板: 四虎影音 | 欧美日韩在线一区二区 | 毛片网免费| 久久亚洲精品国产精品紫薇 | 国产一区久久 | 国产高潮国产高潮久久久91 | 一区二区视频在线 | 亚洲成人午夜电影 | 欧美综合色 | 久久a视频 | 婷婷综合在线 | 欧美日韩亚洲一区二区 | 国产精品毛片久久久久久久 | 亚洲淫片 | 日韩国产一区二区 | 午夜一级片 | 国产精品一区二区三区四区五区 | 日韩欧美三区 | 91精品国产91久久综合桃花 | 国产精品99精品久久免费 | 亚洲电影在线 | 日韩精品专区在线影院重磅 | 精品一区av | 欧美亚洲第一页 | 亚洲精品免费视频 | 亚洲国产精品久久久久婷婷老年 | 欧美成人自拍 | 国产精品美女久久久久久免费 | 欧美日韩国产一级片 | 精品福利视频网站 | 欧美日韩电影一区二区 | 国产特级毛片aaaaaa毛片 | 91黄在线观看 | 国产免费天天看高清影视在线 | 国产精品99久久久久久久女警 | 国产一区中文字幕 | 中文字幕综合在线 | 亚洲国产精品福利 | 在线观看免费毛片视频 | 欧洲一区 | 成人久久久久久久 |