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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据绑定的基础

發(fā)布時間:2025/6/15 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据绑定的基础 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

先用一個最簡單的例子來演示數(shù)據(jù)綁定。

新建一個項目TestData來測試,拖拽兩個控件到屏幕上:TextBox和Slider。

給Slider的Name設(shè)置為slider1,然后我們給兩個控件之間添加數(shù)據(jù)綁定,使得TextBox始終顯示滑動條內(nèi)的進度值。

然后給Text屬性添加數(shù)據(jù)綁定,并且指定對象為slider1,完整代碼如下:

[html] view plaincopy
  • <Grid?Background="{StaticResource?ApplicationPageBackgroundThemeBrush}">??
  • ???????<TextBox?HorizontalAlignment="Center"?Margin="0,-100,0,0"?TextWrapping="Wrap"???
  • ????????????????Text="{Binding?Value,?Mode=TwoWay,?ElementName=slider1}"?VerticalAlignment="Center"/>??
  • ???????<Slider?x:Name="slider1"?HorizontalAlignment="Center"?VerticalAlignment="Center"?Width="200"?Height="30"/>??
  • ??
  • ???</Grid>??

  • 運行的結(jié)果就是1.拖動滑塊時文本框的數(shù)值也隨之改變2.文本框內(nèi)容改變時滾動條也會跟著改變,這就是TwoWay:


    那么怎么自己去寫數(shù)據(jù)綁定呢?

    新建一個Person類來試驗一下。

    [csharp] view plaincopy
  • using?System;??
  • using?System.Collections.Generic;??
  • using?System.Linq;??
  • using?System.Text;??
  • using?System.Threading.Tasks;??
  • ??
  • namespace?TestData??
  • {??
  • ????class?Person??
  • ????{??
  • ????????public?string?Name??
  • ????????{??
  • ????????????get;??
  • ????????????set;??
  • ????????}??
  • ??
  • ????????public?int?Age??
  • ????????{??
  • ????????????get;??
  • ????????????set;??
  • ????????}??
  • ????}??
  • }??

  • 然后在主頁面拖拽一個TextBox和兩個按鈕,一個按鈕用來讀出Person的值,一個是用來修改Person的值:


    先給TextBox命名為text1以便后面使用。

    雙擊讀取的按鈕,跳轉(zhuǎn)到了后臺的c#文件。

    在類中聲明一個Person對象:? ? ? ? Person myPerson = new Person();

    然后在OnNavigatedTo方法中判斷,如果是NavigationMode.New則設(shè)置text1的DataContent為前面聲明的myPerson。

    這里可以把DataContent理解為數(shù)據(jù)源。

    然后點擊按鈕的監(jiān)聽方法里,將讀取到的Person內(nèi)容顯示出來,在點擊第二個按鈕的時候?qū)erson的name顯示為當前的毫秒數(shù)值。

    完整的代碼如下:

    [csharp] view plaincopy
  • using?System;??
  • using?System.Collections.Generic;??
  • using?System.IO;??
  • using?System.Linq;??
  • using?Windows.Foundation;??
  • using?Windows.Foundation.Collections;??
  • using?Windows.UI.Popups;??
  • using?Windows.UI.Xaml;??
  • using?Windows.UI.Xaml.Controls;??
  • using?Windows.UI.Xaml.Controls.Primitives;??
  • using?Windows.UI.Xaml.Data;??
  • using?Windows.UI.Xaml.Input;??
  • using?Windows.UI.Xaml.Media;??
  • using?Windows.UI.Xaml.Navigation;??
  • ??
  • //?“空白頁”項模板在?http://go.microsoft.com/fwlink/?LinkId=234238?上有介紹??
  • ??
  • namespace?TestData??
  • {??
  • ????///?<summary>??
  • ????///?可用于自身或?qū)Ш街?Frame?內(nèi)部的空白頁。??
  • ????///?</summary>??
  • ????public?sealed?partial?class?MainPage?:?Page??
  • ????{??
  • ??
  • ????????Person?myPerson?=?new?Person(){?Name?=?"why"?,?Age?=?20?};??
  • ????????public?MainPage()??
  • ????????{??
  • ????????????this.InitializeComponent();??
  • ????????}??
  • ??
  • ????????///?<summary>??
  • ????????///?在此頁將要在?Frame?中顯示時進行調(diào)用。??
  • ????????///?</summary>??
  • ????????///?<param?name="e">描述如何訪問此頁的事件數(shù)據(jù)。Parameter??
  • ????????///?屬性通常用于配置頁。</param>??
  • ????????protected?override?void?OnNavigatedTo(NavigationEventArgs?e)??
  • ????????{??
  • ????????????if?(e.NavigationMode?==?NavigationMode.New)??
  • ????????????{??
  • ????????????????text1.DataContext?=?myPerson;??
  • ????????????}??
  • ????????}??
  • ??
  • ????????private?void?Button_Click_1(object?sender,?RoutedEventArgs?e)??
  • ????????{??
  • ????????????MessageDialog?myDialog?=?new?MessageDialog(myPerson.Name);??
  • ????????????myDialog.ShowAsync();??
  • ????????}??
  • ??
  • ????????private?void?Button_Click_2(object?sender,?RoutedEventArgs?e)??
  • ????????{??
  • ????????????myPerson.Name?=?DateTime.Now.Millisecond.ToString();??
  • ????????}??
  • ????}??
  • }??

  • 然后在xaml頁面設(shè)置textbox的數(shù)據(jù)綁定,將其綁定到數(shù)據(jù)源的Name屬性上(前面設(shè)置的數(shù)據(jù)源):

    完整的xaml代碼如下:

    [html] view plaincopy
  • <Page??
  • ????x:Class="TestData.MainPage"??
  • ????xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"??
  • ????xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"??
  • ????xmlns:local="using:TestData"??
  • ????xmlns:d="http://schemas.microsoft.com/expression/blend/2008"??
  • ????xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"??
  • ????mc:Ignorable="d">??
  • ??
  • ????<Grid?Background="{StaticResource?ApplicationPageBackgroundThemeBrush}">??
  • ????????<TextBox?x:Name="text1"?HorizontalAlignment="Center"?Margin="0,0,0,0"?TextWrapping="Wrap"???
  • ?????????????????Text="{Binding?Name}"?VerticalAlignment="Center"/>??
  • ????????<Button?Content="讀取"?HorizontalAlignment="Center"?Margin="0,-100,0,0"?VerticalAlignment="Center"?Click="Button_Click_1"/>??
  • ????????<Button?Content="改變"?HorizontalAlignment="Center"?Margin="0,100,0,0"?VerticalAlignment="Center"?Click="Button_Click_2"/>??
  • ????</Grid>??
  • </Page>??


  • 運行項目,發(fā)現(xiàn)顯示的是why,但是點擊修改之后textbox中的值并沒有改變,因為text不知道其中發(fā)生了變化。

    那么如何在Name發(fā)生變化的時候立即得知?

    我們需要修改Person這個類。

    在數(shù)據(jù)綁定中,建議大家實現(xiàn)一個INotifyPropertyChanged接口。

    它只有一個成員,就是PropertyChanged事件。

    將set稍作修改即可。完整的Person.cs文件如下:

    [csharp] view plaincopy
  • using?System;??
  • using?System.Collections.Generic;??
  • using?System.ComponentModel;??
  • using?System.Linq;??
  • using?System.Text;??
  • using?System.Threading.Tasks;??
  • ??
  • namespace?TestData??
  • {??
  • ????class?Person?:?INotifyPropertyChanged??
  • ????{??
  • ????????private?string?_name;??
  • ????????public?string?Name??
  • ????????{??
  • ????????????get??
  • ????????????{??
  • ????????????????return?_name;??
  • ????????????}??
  • ????????????set??
  • ????????????{??
  • ????????????????_name?=?value;??
  • ????????????????if?(PropertyChanged?!=?null)??
  • ????????????????{??
  • ????????????????????PropertyChanged(this,?new?PropertyChangedEventArgs("Name"));??
  • ????????????????}??
  • ????????????}??
  • ????????}??
  • ??
  • ????????private?int?_age;??
  • ????????public?int?Age??
  • ????????{??
  • ????????????get??
  • ????????????{??
  • ????????????????return?_age;??
  • ????????????}??
  • ????????????set??
  • ????????????{??
  • ????????????????_age?=?value;??
  • ????????????????if?(PropertyChanged?!=?null)??
  • ????????????????{??
  • ????????????????????PropertyChanged(this,?new?PropertyChangedEventArgs("Age"));??
  • ????????????????}??
  • ????????????}??
  • ????????}??
  • ??
  • ????????public?event?PropertyChangedEventHandler?PropertyChanged;??
  • ????}??
  • }??


  • 此時再運行,點擊修改的時候TextBox里面就會跟著變化了。



    順便說一下,綁定模式一共分三種,

    • OneTime:一次綁定
    • OneWay:單向綁定
    • TwoWay:雙向綁定
    子控件會默認繼承父控件的綁定數(shù)據(jù),這就是數(shù)據(jù)上下文的概念。 比如上面說到的綁定數(shù)據(jù)源,也可以寫成:this.DataContext = myPerson; 《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

    總結(jié)

    以上是生活随笔為你收集整理的数据绑定的基础的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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