2023年7月19日发(作者:)
WPF中双向绑定通知机制之ObservableCollection使⽤ msdn中 ObservableCollection
new Students(){ Id=1, Age=11, Name="Tom"}, new Students(){ Id=2, Age=12, Name="Darren"}, new Students(){ Id=3, Age=13, Name="Jacky"}, new Students(){ Id=4, Age=14, Name="Andy"} }; public WindowObservable() { InitializeComponent(); ource = infos; ding(operty, new Binding("") { Source = lbStudent }); } private void button1_Click(object sender, RoutedEventArgs e) { infos[1] = new Students() { Id = 4, Age = 14, Name = "这是⼀个集合改变" }; infos[2].Name = "这是⼀个属性改变"; } public class Students { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } }
}}在这个例⼦中我们将Students数据对象⽤ObservableCollection
new Students(){ Id=1, Age=11, Name="Tom"}, new Students(){ Id=2, Age=12, Name="Darren"}, new Students(){ Id=3, Age=13, Name="Jacky"}, new Students(){ Id=4, Age=14, Name="Andy"} }; public WindowObservable() { InitializeComponent(); ource = infos; ding(operty, new Binding("") { Source = lbStudent }); } private void button1_Click(object sender, RoutedEventArgs e) { infos[1] = new Students() { Id = 4, Age = 14, Name = "这是⼀个集合改变" }; infos[2].Name = "这是⼀个属性改变"; } public class Students : INotifyPropertyChanged { string _name; public int Id { get; set; } public string Name { get { return _name; } set { _name = value; OnPropertyChanged("Name"); } } public int Age { get; set; } protected internal virtual void OnPropertyChanged(string propertyName) { if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } public event PropertyChangedEventHandler PropertyChanged; } }}此时我们再 运⾏代码会发现使⽤DataContext为页⾯对象设置上下⽂不管是集合还是对象都发⽣了改变。⾄此。我们的整个后台通知就能完美监视任何对象变动。但是现在还有⼀个问题。我们如果在点击事件⾥⾯给infos赋值⼀个新的集合数据。如下private void button1_Click(object sender, RoutedEventArgs e) { infos[1] = new Students() { Id = 4, Age = 14, Name = "这是⼀个集合改变" }; infos[2].Name = "这是⼀个属性改变"; infos = new ObservableCollection
new Students(){ Id=1, Age=11, Name="这是改变后的集合"}, new Students(){ Id=2, Age=12, Name="这是改变后的集合"}, new Students(){ Id=3, Age=13, Name="这是改变后的集合"}, new Students(){ Id=4, Age=14, Name="这是改变后的集合"} };}会发现数据并没有变更。这是为什么?我们明明实现了ObservableCollection
new Students(){ Id=1, Age=11, Name="Tom"}, new Students(){ Id=2, Age=12, Name="Darren"}, new Students(){ Id=3, Age=13, Name="Jacky"}, new Students(){ Id=4, Age=14, Name="Andy"} }; ntext = viewModel; } private void button1_Click(object sender, RoutedEventArgs e) { tList[1] = new Students() { Id = 4, Age = 14, Name = "这是⼀个集合改变" };
tList = new ObservableCollection
new Students(){ Id=19, Age=111, Name="这是变化后的⼏何"}, new Students(){ Id=29, Age=121, Name="这是变化后的⼏何"}, new Students(){ Id=39, Age=131, Name="这是变化后的⼏何"}, new Students(){ Id=49, Age=141, Name="这是变化后的⼏何"} }; tList[2].Name = "这是⼀个属性改变"; } }我们给xaml listbox设置如下绑定ItemsSource="{Binding StudentList, Mode=TwoWay}"运⾏程序我们发现集合的改变也会被通知到前台。转载请以超链接形式标明⽂章原始出处。
发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1689722599a281136.html
评论列表(0条)