<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      通過Demo學WPF—數據綁定(一)?

      前言?

      想學習WPF,但是看視頻教程覺得太耗時間,直接看文檔又覺得似懂非懂,因此想通過看Demo代碼+文檔的方式進行學習。

      準備?

      微軟官方其實提供了WPF的一些Demo,地址為:microsoft/WPF-Samples: Repository for WPF related samples (github.com)

      將其克隆到本地,有很多的Demo代碼:

      image-20240129141054183

      新建一個空白解決方案:

      image-20240129141201234

      添加現有項目:

      image-20240129141238024

      選擇Data Binding 中的 SimpleBinding:

      image-20240129141537501

      項目文件如下所示:

      image-20240129141951318

      查看SimpleBinding這個Demo的效果:

      SimpleBindingDemo的效果

      學習這個Demo?

      數據綁定的概念

      首先需要知道數據綁定的基本概念,數據綁定是在應用 UI 與其顯示的數據之間建立連接的過程。 如果綁定具有正確的設置,并且數據提供適當的通知,則在數據更改其值時,綁定到該數據的元素會自動反映更改。 數據綁定還意味著,如果元素中數據的外部表示形式發生更改,則基礎數據可以自動進行更新以反映更改。 例如,如果用戶編輯 TextBox 元素中的值,則基礎數據值會自動更新以反映該更改。

      現在再來看一下,數據綁定的模型圖:

      image-20240129142805099

      現在我們根據這張模型圖,學習這個Demo。

      這個模型圖表示數據綁定至少需要三個東西:

      • 綁定目標
      • 綁定
      • 綁定源

      現在我們分別看看這個demo里面,這三個東西在哪?

      綁定目標

      我們發現這個demo的綁定目標是元素TextBox的Text屬性與TextBlock的Text屬性。

      綁定

      image-20240129143549091

      這是一個C#類,查找在該Demo中,哪里出現了Binding?

      發現在MainWindow.xaml中出現了Binding,有兩處地方,分別是:

        <TextBox>
            <TextBox.Text>
                <Binding Source="{StaticResource MyDataSource}" Path="PersonName"
       UpdateSourceTrigger="PropertyChanged"/>
            </TextBox.Text>
        </TextBox>
      

       <TextBlock Text="{Binding Source={StaticResource MyDataSource}, Path=PersonName}"/>
      

      這兩處都是在 XAML 中聲明綁定。

       <TextBox>
            <TextBox.Text>
                <Binding Source="{StaticResource MyDataSource}" Path="PersonName"
       UpdateSourceTrigger="PropertyChanged"/>
            </TextBox.Text>
        </TextBox>
      

      這種使用的是對象元素語法

      <TextBlock Text="{Binding Source={StaticResource MyDataSource}, Path=PersonName}"/>
      

      這種使用的是標記擴展

      從這里我們接觸到了Binding類的三個屬性,SourcePathUpdateSourceTrigger

      那它們分別是什么意思呢?

      先來看下Source

      image-20240129144554369

      我們發現這個demo里,Source="{StaticResource MyDataSource}StaticResource MyDataSource又是什么呢?

      在Window.Resources標簽下有一行代碼:

      image-20240129144901173

      <local:Person x:Key="MyDataSource" PersonName="Joe"/>
      

      <Window.Resources>標簽在XAML中用于定義可以在整個窗口中重用的資源。這些資源可以是各種類型,包括樣式、數據源、數據模板、顏色、畫刷等。

      <local:Person x:Key="MyDataSource" PersonName="Joe"/>這行代碼創建了一個Person對象,并將其命名為"MyDataSource",該對象的PersonName屬性設置為"Joe",這樣你就可以在窗口的其他地方通過這個鍵來引用這個對象。

      因此Source={StaticResource MyDataSource}的意思就是將Binding對象的Source屬性設置為鍵為"MyDataSource"的資源,在這里也就是一個Person對象。

      再來看看Path

      image-20240129150048051

      表示綁定源屬性的路徑。

      Path="PersonName"表示綁定源是剛剛那個Person對象的PersonName屬性。

      最后再看看UpdateSourceTrigger

      image-20240129150426493

      這個屬性可能就會難理解一點。

      它表示當綁定目標怎么樣時,綁定源的值應該被更新。

      它的類型為枚舉類型,有以下幾個值:

      含義
      Default 綁定目標屬性的默認 UpdateSourceTrigger 值。 大多數依賴屬性的默認值為 PropertyChanged,而 Text 屬性的默認值為 LostFocus
      Explicit 僅在調用 UpdateSource() 方法時更新綁定源。
      LostFocus 每當綁定目標元素失去焦點時,都會更新綁定源。
      PropertyChanged 每當綁定目標屬性發生更改時,都會更新綁定源。
       <Label>Enter a Name:</Label>
       <TextBox>
           <TextBox.Text>
               <Binding Source="{StaticResource MyDataSource}" Path="PersonName"
      UpdateSourceTrigger="PropertyChanged"/>
           </TextBox.Text>
       </TextBox>
      

      我們會發現在這個demo中,TextBox.Text設置了UpdateSourceTrigger屬性。

      這是因為大多數依賴項屬性的默認值為 PropertyChanged,而 Text 屬性的默認值為 LostFocus。在這個demo中,我們不希望失去焦點才更新源數據,而是一發生改變就更新綁定源,因此設置UpdateSourceTrigger屬性為PropertyChanged

      總結一下,我們遇到的關于Binding類的三個屬性SourcePathUpdateSourceTrigger

      屬性名 含義
      Source 獲取或設置要用作綁定源的對象。
      Path 獲取或設置綁定源屬性的路徑。
      UpdateSourceTrigger 獲取或設置一個值,它可確定綁定源更新的時機。

      現在我們已經介紹了綁定目標、綁定就差綁定源了。

      綁定源

      在數據綁定中,綁定源對象是指用戶從其獲取數據的對象。

      在這個demo中,綁定源是一個Person對象。

      查看Person類的代碼:

      using System.ComponentModel;
      
      namespace SimpleBinding
      {
          // This class implements INotifyPropertyChanged
          // to support one-way and two-way bindings
          // (such that the UI element updates when the source
          // has been changed dynamically)
          public class Person : INotifyPropertyChanged
          {
              private string _name;
      
              public Person()
              {
              }
      
              public Person(string value)
              {
                  _name = value;
              }
      
              public string PersonName
              {
                  get { return _name; }
                  set
                  {
                      _name = value;
                      // Call OnPropertyChanged whenever the property is updated
                      OnPropertyChanged("PersonName");
                  }
              }
      
              // Declare the event
              public event PropertyChangedEventHandler PropertyChanged;
              // Create the OnPropertyChanged method to raise the event
              protected void OnPropertyChanged(string name)
              {
                  var handler = PropertyChanged;
                  handler?.Invoke(this, new PropertyChangedEventArgs(name));
              }
          }
      }
      

      首先這個Person類實現了INotifyPropertyChanged接口,我們來看下INotifyPropertyChanged接口:

      public interface INotifyPropertyChanged
      {
          //
          // 摘要:
          //     Occurs when a property value changes.
          event PropertyChangedEventHandler? PropertyChanged;
      }
      

      包含一個PropertyChanged事件,因此該Person類必須實現接口的成員PropertyChanged。

      當屬性值被設置時,會調用OnPropertyChanged方法,從而觸發事件。

      INotifyPropertyChanged接口定義了一個PropertyChanged事件,當一個屬性的值發生變化時,你可以觸發這個事件。WPF的數據綁定引擎會監聽這個事件,當事件被觸發時,它會更新綁定的UI元素的值。
      如果你的數據源沒有實現這個接口,那么當數據源的屬性值發生變化時,WPF的數據綁定引擎將無法知道這個變化,因此它將無法更新UI元素的值。
      這意味著,如果你的數據源的屬性值在運行時可能會發生變化,并且你希望這些變化能夠自動反映到UI上,那么你的數據源就需要實現INotifyPropertyChanged接口。

      總結?

      通過這個小Demo,我們明白了WPF中的數據綁定的三要素,綁定對象、綁定、綁定源。在這個demo中,我們學會了如何在xaml中聲明綁定,知道了Binding的三個屬性SourcePathUpdateSourceTrigger的含義,明白了數據源為什么要實現INotifyPropertyChanged接口,學會了WPF中數據綁定的基本用法,希望對你有所幫助。

      posted @ 2024-01-29 16:46  mingupupup  閱讀(960)  評論(1)    收藏  舉報
      主站蜘蛛池模板: 五月丁香六月综合缴清无码| av无码精品一区二区三区| 国产成人女人在线观看| 国产精品点击进入在线影院高清| 国产成人无码aa精品一区| 伦理片午夜视频在线观看| 蜜臀久久综合一本av| 999精品全免费观看视频| 东京热一精品无码av| 国产精品人一区二区三区| 国产成人麻豆亚洲综合无码精品 | av男人的天堂在线观看国产| 无码国内精品久久人妻蜜桃| 性人久久久久| 欧美激情 亚洲 在线| 欧美人与动牲交a免费| 日韩人妻无码精品久久久不卡| 羞羞影院午夜男女爽爽免费视频| av偷拍亚洲一区二区三区| 国产高清不卡视频| 四川丰满少妇无套内谢| 色就色偷拍综合一二三区| 人妻系列无码专区无码中出| 久久亚洲精品中文字幕馆| 国产精品一区二区不卡视频| 亚洲av久久精品狠狠爱av| 国产精品一二三区蜜臀av| 高潮喷水抽搐无码免费| 体验区试看120秒啪啪免费| 免费无码肉片在线观看| 国内揄拍国内精品少妇国语| 欧美成年性h版影视中文字幕| 国产精品午夜福利在线观看| 国产精品流白浆无遮挡| 怡红院一区二区三区在线| 亚洲欧美综合精品成人网站| 视频一区视频二区卡通动漫| 四虎国产精品成人免费久久| 久久久无码精品亚洲日韩蜜臀浪潮| 国产午夜一区二区在线观看 | 欧美性猛交xxxx乱大交极品|