(八)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);//把數據源與目標連在一起。
結果:
智能推薦
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進行...
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壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...