ObservableCollection,继承了Collection, INotifyCollectionChanged, INotifyPropertyChanged,UI更新的数据反映到后台会更新对应的UI
例:UC1ViewModel类
1 Imports System.Collections.ObjectModel 2 3 Public Class UC1ViewModel 4 Inherits ViewModelBase 5 6 Private _datas As ObservableCollection(Of PersonInfo) 7 Public ReadOnly Property Datas As ObservableCollection(Of PersonInfo) 8 Get 9 Return _datas 10 End Get 11 End Property 12 13 Private _selectedData As PersonInfo 14 Public Property SelectedData As PersonInfo 15 Get 16 Return _selectedData 17 End Get 18 Set(value As PersonInfo) 19 _selectedData = value 20 OnPropertyChanged("SelectedData") 21 End Set 22 End Property 23 24 Public Sub New() 25 _datas = New ObservableCollection(Of PersonInfo) 26 End Sub 27 28 Public Sub BuildViewModel() 29 '_datas.Add("zhangsan 男 23歳") 30 '_datas.Add("zhangsan1") 31 '_datas.Add("zhangsan") 32 '_datas.Add("zhangsan3") 33 '_datas.Add("zhangsan") 34 '_datas.Add("zhangsan") 35 '_datas.Add("zhangsan") 36 _datas.Add(New PersonInfo() With {.Name = "zhangsan", .Age = 23}) 37 _datas.Add(New PersonInfo() With {.Name = "zhangsan2", .Age = 5}) 38 _datas.Add(New PersonInfo() With {.Name = "zhangsan3", .Age = 67}) 39 _datas.Add(New PersonInfo() With {.Name = "zhangsan4", .Age = 23}) 40 41 Me.SelectedData = _datas.Last 42 End Sub 43 44 End Class
PersonInfo类
1 Public Class PersonInfo 2 3 Private _name As String 4 Public Property Name As String 5 Get 6 Return _name 7 End Get 8 Set(value As String) 9 _name = value 10 End Set 11 End Property 12 13 Private _age As Integer 14 Public Property Age As Integer 15 Get 16 Return _age 17 End Get 18 Set(value As Integer) 19 _age = value 20 End Set 21 End Property 22 23 Public Overrides Function ToString() As String 'Overrides重写 24 Return String.Format("{0}:{1}", Name, Age.ToString()) 25 End Function 26 27 End Class
上述例子是工程里的部分代码,其他详细工程案例见:
WPF 中双向绑定通知机制之ObservableCollection使用
ObservableCollection和List的区别总结(推荐)
补充:List<T>和ObservableCollection<T>的相互转换
ObservableCollection转换List
ObservableCollection<T> o; // 假设已经赋值 List<T> list = new List<T>(o.ToList());
ObservableCollection<T> o; // 假设已经赋值 List<T> list = new List<T>(o.ToList());
List转换ObservableCollection
List<T> list; // 假设已经赋值 // 方法1 ObservableCollection<T> o = new ObservableCollection<T>(list); //方法2 ObservableCollection<T> o = new ObservableCollection<T>(); list.Foreach(l => o.Add(l));