C# 中的INotifyPropertyChanged和ObservableCollection
INotifyPropertyChanged
它的作用:向客戶端發出某一屬性值已更改的通知。
當屬性改變時,它可以通知客戶端,並進行介面資料更新.而我們不用寫很多複雜的程式碼來更新介面資料,這樣可以做到方法簡潔而清晰,鬆耦合和讓方法變得更通用.可用的地方太多了:例如上傳進度,實時後臺資料變更等地方。
它的作用:向客戶端發出某一屬性值已更改的通知。
當屬性改變時,它可以通知客戶端,並進行介面資料更新.而我們不用寫很多複雜的程式碼來更新介面資料,這樣可以做到方法簡潔而清晰,鬆耦合和讓方法變得更通用.可用的地方太多了:例如上傳進度,實時後臺資料變更等地方.目前我發現winform和silverlight都支援,確實是一個強大的介面.
在建構函式中先繫結
public Class_Name()
{
User user = new User();
user.Name = "your name";
user.Address = "your address";
textBox1.Text = user.Name;
textBox2.Text = user.Address;
}
編寫一個簡單的業務類
public class User : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private string _name;
public string Name
{
get { return _name; }
set
{
_name = value;
if(PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("Name"));
}
}
}
private string _address;
public string Address
{
get { return _address; }
set
{
_address = value;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("Address"));
}
}
}
}
ObservableCollection
繫結到集合
資料繫結的資料來源物件可以是一個含有資料的單一物件,也可以是一個物件的集合。之前,一直在討論如何將目標物件與一個單一物件繫結。Silverlight中的資料繫結還能將目標物件與集合物件相繫結,這也是很常用的。比如顯示文章的題目列表、顯示一系列圖片等。
如果要繫結到一個集合型別的資料來源物件,繫結目標可以使用ItemsControl,如ListBox或DataGrid等。另外,通過定製ItemsControl的資料模板(DataTemplate),還可以控制集合物件中每一項的顯示。
使用ObservableCollection
資料來源集合物件必須繼承IEnumerable介面,為了讓目標屬性與資料來源集合的更新(不但包括元素的修改,還包括元素的增加和刪除)保持同步,資料來源集合還必須實現INotifyPropertyChanged介面和INotifyCollectionChanged介面。
在Silverlight中建立資料來源集合可以使用內建的ObservableCollection類,因為ObservableCollection類既實現了INotifyPropertyChanged介面,又實現了INotifyCollectionChanged介面。使用ObservableCollection類不但可以實現Add、Remove、Clear和Insert操作,還可以觸發PropertyChanged事件。
它的作用:向客戶端發出某一屬性值已更改的通知。
當屬性改變時,它可以通知客戶端,並進行介面資料更新.而我們不用寫很多複雜的程式碼來更新介面資料,這樣可以做到方法簡潔而清晰,鬆耦合和讓方法變得更通用.可用的地方太多了:例如上傳進度,實時後臺資料變更等地方。
它的作用:向客戶端發出某一屬性值已更改的通知。
當屬性改變時,它可以通知客戶端,並進行介面資料更新.而我們不用寫很多複雜的程式碼來更新介面資料,這樣可以做到方法簡潔而清晰,鬆耦合和讓方法變得更通用.可用的地方太多了:例如上傳進度,實時後臺資料變更等地方.目前我發現winform和silverlight都支援,確實是一個強大的介面.
在建構函式中先繫結
public Class_Name()
{
User user = new User();
user.Name = "your name";
user.Address = "your address";
textBox1.Text = user.Name;
textBox2.Text = user.Address;
}
編寫一個簡單的業務類
public class User : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private string _name;
public string Name
{
get { return _name; }
set
{
_name = value;
if(PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("Name"));
}
}
}
private string _address;
public string Address
{
get { return _address; }
set
{
_address = value;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("Address"));
}
}
}
}
ObservableCollection
繫結到集合
資料繫結的資料來源物件可以是一個含有資料的單一物件,也可以是一個物件的集合。之前,一直在討論如何將目標物件與一個單一物件繫結。Silverlight中的資料繫結還能將目標物件與集合物件相繫結,這也是很常用的。比如顯示文章的題目列表、顯示一系列圖片等。
如果要繫結到一個集合型別的資料來源物件,繫結目標可以使用ItemsControl,如ListBox或DataGrid等。另外,通過定製ItemsControl的資料模板(DataTemplate),還可以控制集合物件中每一項的顯示。
使用ObservableCollection
資料來源集合物件必須繼承IEnumerable介面,為了讓目標屬性與資料來源集合的更新(不但包括元素的修改,還包括元素的增加和刪除)保持同步,資料來源集合還必須實現INotifyPropertyChanged介面和INotifyCollectionChanged介面。
在Silverlight中建立資料來源集合可以使用內建的ObservableCollection類,因為ObservableCollection類既實現了INotifyPropertyChanged介面,又實現了INotifyCollectionChanged介面。使用ObservableCollection類不但可以實現Add、Remove、Clear和Insert操作,還可以觸發PropertyChanged事件。
相關文章
- List和ObservableCollection的轉換
- wpf ObservableCollection篩選功能
- 關於ObservableCollection的更新與不更新分析
- C#中?和??及?:的用法C#
- WPF 之 INotifyPropertyChanged 介面的使用 (一)
- C#中的Unsafe和FixedC#
- C# 中的委託和事件C#事件
- C#中Hashtable和HashMap的區別C#HashMap
- C#中的協變和逆變C#
- C#中EXCEL的輸入和倒出C#Excel
- C# 中的 in 引數和效能分析C#
- C#中的委託和事件(續)C#事件
- C#中ref和out的區別C#
- C#中的程式碼和資料C#
- C#中的?.和!.運算子(連結)C#
- C#中繼承和多型的研究C#中繼繼承多型
- C#中的依賴注入和IoC容器C#依賴注入
- 聊聊 C++ 和 C# 中的 lambda 玩法C++C#
- 【轉】C#中virtual和abstract的區別C#
- C#中類的建立和例項化C#
- 淺析C#中的等號“==”和EqualsC#
- 全面分析C#方法中的ref和outC#
- C#中堆和堆疊的區別C#
- C#中的ref和out的意義和使用方法C#
- Fody,告別煩人的INotifyPropertyChanged,最簡方式實現通知!
- [C#]C#中ToString()和Convert.ToString()的區別C#
- C#中的char和string的使用簡介C#
- c#物件導向中的get和set的用法C#物件
- C#中的屬性和欄位的區別C#
- C#中的介面和泛型集合探討C#泛型
- c#中的ReadOnlySequence<T>和ReadOnlySequenceSegment<T>C#
- C# 中 Struct 和 Class 的區別總結C#Struct
- C# 中的 == 和 equals()有什麼區別?C#
- C#中的Lambda表示式和表示式樹C#
- C#中的執行緒二(BeginInvoke和Invoke)C#執行緒
- c#中結構體和類的比較C#結構體
- C# 中List中的Count和Count(),有什麼區別C#
- 細說 C# 中的 IEnumerable和IEnumerator介面C#