• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • (八)Binding

    下面進行介紹一個Binding的最簡單用法:

    我們首先創建一個Students類包含一個學生姓名的列表的屬性。這個類的實例將會作為數據源.

    class Students
    {
          private List<string> name = new List<string>();
          public List<string> Name =  public List<string> Name 
          {
                    get { return name; }
                    set { name = value;}
          }
    }

    現在這個Students類的Name屬性是普通屬性,無法通知Binding,所以Binding也就無法把屬性值的變化傳給UI元素,下面我們在屬性的Set方法中激發一個PropertyChanged事件,這個事件不需要我們實現,我們需要實現INotifyPropertyChanged接口:

     class Students : INotifyPropertyChanged
            {
                private List<string> name = new List<string>();
                public List<string> Name {
                    get { return name; }
                    set {
                            name = value;
                            if (PropertyChanged != null)
                            {
                                this.PropertyChanged.Invoke(this,new PropertyChangedEventArgs("Name"));
                            }
                    }
                }
    
                public event PropertyChangedEventHandler PropertyChanged;
            }

    這時當Name屬性的值發生變化時PropertyCharged事件就會被激發,bingding接收到這個事件后發現事件告訴他”Name”屬性的值發生變化,于是Binding就會通知目標端的UI元素顯示新的值。

    下面給出完整的一個小例子:

    XAML:

    <Grid>
        <StackPanel>
            <ComboBox x:Name="comboBox" Margin="5"/>
            <Button Margin="5" Click="Button_Click">Add Age</Button>
        </StackPanel>
    </Grid>

    對應的cs代碼

     public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
                //重點在這進行binding
                this.comboBox.SetBinding(ComboBox.ItemsSourceProperty, new Binding("Name") {Source = stu});
            }
    
            class Students:INotifyPropertyChanged
            {
                private List<string> name = new List<string>();
                public List<string> Name {
                    get { return name; }
                    set {
                            name = value;
                            if (PropertyChanged != null)
                            {
                                this.PropertyChanged.Invoke(this,new PropertyChangedEventArgs("Name"));
                            }
                    }
                }
    
                public event PropertyChangedEventHandler PropertyChanged;
            }
    
            private Students stu = new Students();
            List<string> names = new List<string>();
            private void Button_Click(object sender, RoutedEventArgs e)
            {
                names.Add("Hello");
                names.Add("World");
                names.Add("Binding");
                names.Add("\n");
                stu.Name = null;
                stu.Name = names;
            }
        }

    上面有注釋那句代碼

    this.comboBox.SetBinding(ComboBox.ItemsSourceProperty, new Binding("Name") {Source = stu});

    我們進行分解(下面代碼等價與上面那句):

    Binding binding = new Binding();//定義bindg
    binding.Source = stu;//指定實例數據源
    binding.Path = new PropertyPath("Name");//指定訪問路徑即綁定哪一個屬性。
    BindingOperations.SetBinding(this.comboBox,ComboBox.ItemsSourceProperty,binding);//把數據源與目標連在一起。

    結果:
    這里寫圖片描述

    版權聲明:本文為wodeshijianhrf原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/wodeshijianhrf/article/details/78040609

    智能推薦

    Data Binding 學習

    概念 數據綁定,對MVVM的是實現,MVVM就是把MVC中的C層換成了VM ViewModel也是一種Model,相對于Model更偏向業務和數據,而ViewModel僅僅用來展現,與View更緊密,把ViewModel綁定到xml,保證其數據來源都是來自于ViewModel,提高了開發效率,性能高功能強。 類似的方案 ButterKnife Android Annotations RoboBin...

    Silverlight中Binding屬性RelativeSource

    本文github:https://github.com/kiwiwin/silverlight-demo,文件夾:domain-service-duplex-by-auto-refresh-demo RelativeSource可以用來指定binding的source和binding的target之間的位置關系。 RelativeSource的三種模式: 1.Self模式 目標元素應用作此綁定的源...

    Android >> 16. Data Binding

    數據綁定庫是一種支持庫,借助該庫,我們可以使用聲明性格式(而非程序化地)將布局中的界面組件綁定到應用中的數據源。 在上一節中(Android >> 13. LiveData),我們已經能夠使用LivaData 的方式實現數據的存儲和管理,但是有的地方還是略顯麻煩,例如對于那些TextView 和Button 的控件我們還是要去聲明已經實例化,那么這一節我們就使用DataBinding ...

    04.spring mvc binding

    一、說明 將【請求中的字段】按照【名字匹配的原則】填入【模型對象】。 二、方式  1、定義controller 2、controller中返回的字符串對應了 /WEB-INF/jsps/course_admin/edit.jsp頁面 (由于web.xml -> mvc-dispatcher-servlet.xml -> 使用了InternalResourceViewResol...

    mybatis-binding包閱讀

    binding包主要功能 一句話:綁定mapper接口; 解析xml配置文件時,MapperRegistry執行addMapper,將mapper接口注冊進來; sqlSession調用getMapper,獲取MapperRegistry中已經注冊好的mapper; binding包主要結構 binding包設計模式 代理模式,如上圖,當我們調用自定義的mapper接口時,mybatis的bind...

    猜你喜歡

    SwiftUI筆記之@State, @Binding

    SwiftUI筆記之@State, @Binding 首先看一段代碼 分析 界面顯示 一個矩形框 一行文本, 初始內容為空 一個文本輸入框, 沒有輸入時,提示文字為 外部傳入的 placeholder內容 交互操作 輸入文本時, 上面的一行文本會同步顯示輸入框中的內容 原理 ContenView中使用到了自定義View(Input),使用@Binding的方式將input與Input的text進行...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    精品国产乱码久久久久久蜜桃不卡