- 浏览: 204612 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (231)
- C++学习 (41)
- vc学习 (25)
- vc异常 (4)
- Flex (2)
- Ext (0)
- java学习笔记 (15)
- mysql学习笔记 (1)
- ibatis学习笔记 (7)
- struts1学习笔记 (1)
- hibernate学习笔记 (3)
- javascript学习笔记 (8)
- eclipse快捷键 (2)
- 英语学习 (1)
- cmd (1)
- eclipse 配置 (2)
- 其他 (4)
- JAVASE (34)
- firefox (1)
- linux (8)
- Apache (6)
- cms (22)
- jsuc (10)
- html (3)
- css (1)
- 作图 (2)
- vs2012 (2)
- 编码转换 (12)
- work_unicode (1)
- work_webbrowser (1)
- work_trade_quotes_login (1)
- c#学习 (38)
- wpf学习 (31)
- wpf快速学习 (1)
- VB学习 (1)
- NSIS (4)
- log4cpp (3)
- 学习web (1)
- 经验 (1)
- c_汇编 (1)
最新评论
本篇学习了ObservableCollection<T>相关知识,因为在项目开发中我碰到一些问题,后来发现时我的理解偏差!所以做下笔记!
(一)代码:
(二)实现类成员更改通知UI:
要想实现类属性值修改,我们必须修改Student类,如下:
(三)总结:
本篇学习了 ObservableCollection<T>与List<T>作为绑定数据源的不同,实例充分说明了 ObservableCollection<T>在Silverlight中作为绑定数据源的优势! 并例举了自己最初对ObservableCollection<T>的误解。并说明了怎样实现类属性成员的修改更改UI的实现方法!这里绑定可以是OneTime,OneWay,TwoWay.具体 理解可以看我的另一篇文章Silverlight中OneTime,OneWay,TwoWay及INotifyPropertyChanged 接口的理解
(四)
数据层已经变了,为何有时更新不了界面,因为取不到界面
(五)
线程内进行
for (int i = 0; i < vCancels.Count; i++)
{
Mgr.TransactionService.CancelOrder("F", vCancels[i].OrderId, vCancels[i].ContractNo, vCancels[i].OperatorNo);
}
不要涉及到任何界面的,开始用界面的iTransactionService
iTransactionService = Mgr.TransactionService;
线程中for循环还是会卡界面
(一)代码:
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; //添加命名空间 using System.Collections.ObjectModel; using System.ComponentModel; namespace CatalogTest { public partial class ObservableCollectionVSList : UserControl { ObservableCollection<Student> students = new ObservableCollection<Student>(); //List<Student> students = new List<Student>(); Student selectedStudent = null; public ObservableCollectionVSList() { InitializeComponent(); this.Loaded += new RoutedEventHandler(ObservableCollectionVSList_Loaded); } void ObservableCollectionVSList_Loaded(object sender, RoutedEventArgs e) { Student student1 = new Student() { StudentID = "001", StudentName = "张三" }; Student student2 = new Student() { StudentID = "002", StudentName = "李四" }; Student student3 = new Student() { StudentID = "003", StudentName = "王五" }; students.Add(student1); students.Add(student2); students.Add(student3); //绑定 listBox1.ItemsSource = students; listBox1.DisplayMemberPath = "StudentName"; //注册选择项事件 this.listBox1.SelectionChanged += new SelectionChangedEventHandler(listBox1_SelectionChanged); } void listBox1_SelectionChanged(object sender, SelectionChangedEventArgs e) { selectedStudent = this.listBox1.SelectedItem as Student; } //删除 private void btnDel_Click(object sender, RoutedEventArgs e) { if (selectedStudent != null) { students.Remove(selectedStudent); } } //修改 private void btnEdit_Click(object sender, RoutedEventArgs e) { if (selectedStudent != null) { int myIndex = students.IndexOf(selectedStudent); students[myIndex].StudentName = "我改名了!"; } } //添加 private void btnAdd_Click(object sender, RoutedEventArgs e) { Student student = new Student() { StudentID="009",StudentName="Joetao"}; students.Add(student); } } public class Student { public string StudentID { get; set; } public string StudentName { get; set; } } //分别采用 ObservableCollection<Student>与List<Student>作为绑定数据源 //当我们用List<T>作为数据源绑定UI控件时:当做增删改操作来修改students绑定数据源时,数据源都不能通知UI更新。 //当我们用ObservableCollection<T>作为数据绑定UI控件时:当做增删改操作来修改students绑定数据源时,Add()和Remove()操作修改的数据源能通知UI更新,而改操作不能更新UI. // //这一点正说明了MSDN上对ObservableCollection<T>类介绍:"表示一个动态数据集合,在添加项、移除项或刷新整个列表时,此集合将提供通知。" //我在处理这个问题理解偏差: //在一开始的时候我对这句话:“实现您自己的集合之前,应考虑使用 ObservableCollection<T> 类,该类具有 INotifyCollectionChanged 和 INotifyPropertyChanged 的内置实现。“ //被我理解为了只要用了ObservableCollection<T>,这个类集合以及类集合中的所有成员属性就具有更改通知的功能,这个理解是错误。ObservableCollection<T>只是针对T类型而言,并非给予了 //类成员属性更改通知的功能,要想类成员属性具有更改UI功能还得让类继承INotifyPropertyChanged接口,并用 (NotifyCollectionChangedEventArgs) 的事件数据报告有关集合更改的特性的信息 }
(二)实现类成员更改通知UI:
要想实现类属性值修改,我们必须修改Student类,如下:
public class Student : INotifyPropertyChanged { private string studentID; public string StudentID { get { return studentID; } set { studentID = value; NotifyPropertyChange("StudentID"); } } private string studentName; public string StudentName { get { return studentName; } set { studentName = value; NotifyPropertyChange("StudentName"); } } public event PropertyChangedEventHandler PropertyChanged; private void NotifyPropertyChange(string propertyName) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } }
(三)总结:
本篇学习了 ObservableCollection<T>与List<T>作为绑定数据源的不同,实例充分说明了 ObservableCollection<T>在Silverlight中作为绑定数据源的优势! 并例举了自己最初对ObservableCollection<T>的误解。并说明了怎样实现类属性成员的修改更改UI的实现方法!这里绑定可以是OneTime,OneWay,TwoWay.具体 理解可以看我的另一篇文章Silverlight中OneTime,OneWay,TwoWay及INotifyPropertyChanged 接口的理解
(四)
数据层已经变了,为何有时更新不了界面,因为取不到界面
(五)
线程内进行
for (int i = 0; i < vCancels.Count; i++)
{
Mgr.TransactionService.CancelOrder("F", vCancels[i].OrderId, vCancels[i].ContractNo, vCancels[i].OperatorNo);
}
不要涉及到任何界面的,开始用界面的iTransactionService
iTransactionService = Mgr.TransactionService;
线程中for循环还是会卡界面
发表评论
-
byte数组直接输出
2016-07-19 11:38 1249byte数组直接输出 BitConverter.ToStrin ... -
wfi:WindowsFormsHost焦点设置
2016-07-05 17:56 580<wfi:WindowsFormsHost> ... -
x:Name
2016-04-25 10:44 450由于“Dameer”是在同一程序集中实现的,您必须设置 x:N ... -
WindowsFormsHost的使用注意
2016-04-25 10:24 1347一使用 1 引用 2 xmlns:wfi ="clr ... -
TextBox滚动条
2016-04-22 16:51 658<TextBox Grid.Row="1& ... -
TextBlock滚动条
2016-04-22 16:49 454<ScrollViewer Name="s ... -
C#_WPF_WPF用户控件库
2016-04-12 11:37 799新建项目》window桌面》WPF用户控件库 -
DependencyProperty.UnsetValue_WPF涉及到资源的嵌套引用,被引用的资源要定义在引用的资源前面
2015-10-27 15:09 1992错误 1 “{DependencyProperty.Unset ... -
string格式的日期时间字符串转为DateTime类型
2015-08-05 14:22 964string格式的日期时间字符串转为DateTime类型 / ... -
checkbox
2015-07-28 17:18 554private void Chec ... -
自定义DataGrid样式
2015-06-26 22:03 747<ResourceDictionary xmlns=&q ... -
x:Name x:Key Name区别
2015-06-25 15:40 598x:Name x:Key Name区别 1、x:Key 只 ... -
work_代码添加
2015-06-23 17:15 507<UserControl x:Class=" ... -
FindName和VisualTreeHelper
2015-06-19 13:23 756int iCount = this.dataGridCan ... -
理解WPF中的视觉树和逻辑树(转载)
2015-06-19 13:00 586理解WPF中的视觉树和逻辑树 理解WPF中的 ... -
理解WPF中的视觉树和逻辑树(转载)
2015-06-19 12:58 1681理解WPF中的视觉树和逻 ... -
GetEnumerator
2015-06-19 12:39 653IEnumerator enumerator = this ... -
资源文件获取配置
2015-06-18 16:03 369object obj = Application.Curren ... -
Pack URI
2015-06-18 15:41 685主要用来定位 资源文 ... -
C#学习之DateTime
2015-04-23 10:30 450DateTime string.Format("{ ...
相关推荐
1. **ObservableCollection<T>**:这是WPF中用于数据绑定的重要类。当你添加、删除或更改集合中的元素时,它会自动通知UI进行相应的更新。 2. **XAML布局**:在创建UI时,我们通常会使用XAML(eXtensible ...
这通常是一个集合,如`ObservableCollection<T>`,其中`T`是你要显示的类型。这个集合可以是静态的,也可以动态生成。 2. **设置ItemsSource**:在`ComboBox`上设置`ItemsSource`属性,将其绑定到你的数据源。例如...
数据源可以是任何实现了`IEnumerable`接口的对象,例如`ObservableCollection`或`List<T>`。以下是一个简单的例子: ```xml <DataGrid x:Name="dataGrid" ItemsSource="{Binding YourDataSource}" ...
在WPF中,我们可以使用`ObservableCollection<T>`来存储菜单项,因为这个集合是支持数据绑定的,可以实时反映数据的变化。视图模型中的菜单数据结构可能是这样的: ```csharp public class MenuItem { public ...
例如,你可以使用`ObservableCollection<T>`来存储数据,这是一个能够自动通知观察者(如WPF UI)其内容发生变化的集合类型。这是因为`ObservableCollection<T>`实现了`INotifyPropertyChanged`接口,当集合中的元素...
### WPF 数据绑定知识点 #### 1. 数据绑定概述 - **定义**: 数据绑定是一种将UI元素与其要显示的数据源连接起来的技术。当数据发生变化时,UI会自动更新以反映这些变化;反之亦然。 - **特点**: - WPF提供了一种...
为了使ListView显示数据,你需要提供一个数据源,通常是ObservableCollection或List<T>,并将其绑定到ListView: ```csharp ObservableCollection<MyDataModel> dataSource = new ObservableCollection<MyDataModel...
如果数据源是集合类型,如`ObservableCollection<T>`,可以使用`ItemsControl`和数据模板显示集合中的每一项。数据模板定义了集合中每个元素的UI表现形式: ```xml <ItemsControl ItemsSource="{Binding ...
这通常通过设置ListView的ItemsSource属性完成,可以绑定到任何实现IEnumerable的对象,如ObservableCollection或List<T>。例如: ```xml <ListView ItemsSource="{Binding DataItems}"> ``` 这里的`DataItems`是...
`LineSeries`通常与数据集(如`ObservableCollection`或`List<T>`)绑定,其中每个元素包含用于图表的X值和Y值。 3. **样式定制**:为了改变线的样式,你可以使用`GridLineStyle`属性。这允许你自定义线条的颜色、...
可以使用数据绑定将UI控件与数据源关联,如`ItemsSource`属性绑定到一个集合,如`ObservableCollection<T>`。查询数据通常在DAL中完成,如使用ADO.NET的`SqlCommand`执行SELECT语句,返回的数据集可以填充到`...
- 使用`ItemsSource`属性将数据源绑定到`TreeView`,可以是任何实现了`IEnumerable`的对象,如`ObservableCollection<T>`或`ICollectionView`。 - `HierarchicalDataTemplate`定义了如何显示和展开子节点,它的`...
此外,ObservableCollection<T>经常被用作动态数据源,因为它能自动通知视图数据的变化。 3. **WPF多个数据源的示例** 当一个界面需要同时显示来自多个数据源的信息时,就会涉及复合数据绑定。开发者可能使用...
具体到实现数据增加和删除即时更新的功能,开发者可能使用了ObservableCollection<T>作为ViewModel中的数据源。ObservableCollection是一个实现了INotifyPropertyChanged和INotifyCollectionChanged接口的集合类,当...
例如,你可以使用ObservableCollection<T>。 2. **创建ICollectionView对象**:通过`CollectionViewSource.GetDefaultView()`方法获取ListView数据源的ICollectionView实例。这个视图可以用来添加排序规则。 3. **...
除此之外,为了实现播放列表功能,开发者可能还需要使用到ObservableCollection<T>,这是一个动态数据集合,可以监控其内容的变化,并自动更新与之绑定的UI元素。在这个例子中,可能有一个列表视图展示所有媒体文件...
最常见的数据源类型是`ObservableCollection<T>`,它是一个可以观察的列表,当添加或删除元素时,UI会自动更新。 **双向数据Binding** 默认情况下,WPF的数据Binding是单向的,即从数据源到UI。但通过设置`Mode=...
使用ObservableCollection<T>处理动态集合,以实现高效的通知机制。 3. **内存管理**:WPF应用程序容易造成内存泄漏,尤其是由于资源未正确释放或强引用导致的。确保在不再需要对象时调用Dispose方法,避免在控件上...
这通常通过ObservableCollection<T>对象来实现,因为它支持动态更改通知,当数据库数据变化时,DataGrid会自动更新。 2. ODBC数据库连接:在C#中,我们可以使用System.Data.Odbc命名空间下的OdbcConnection类来建立...
通过Binding,我们可以将ListView的数据源设置为任何实现了INotifyPropertyChanged接口的对象集合,如ObservableCollection<T>。当数据源发生变化时,界面会自动更新。 **实现ListView分页** 实现ListView分页通常...