首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏张善友的专栏

    ObservableCollection

    这个类就是ObservableCollection<T>。 利用 ObservableCollection 类,WPF /Silverlight 应用程序可以使绑定控件与基础数据源保持同步,但它还提供了更有用的信息,尤其是 ObservableCollection Silverlight多文件(大文件)上传的开源项目》看到上传文件集合类FileCollection就是ObservableCollection的子类 。 此时,我们应该使用动态的ObservableCollection对象绑定。而不是直接的更新ItemSource。 而使用ObservableCollection可以避免这种先全部删除再重载的过程,效率更高。

    1.6K60发布于 2018-01-31
  • 来自专栏林德熙的博客

    WPF 解决 ObservableCollection 提示 Cannot change ObservableCollection during a CollectionChanged event 异

    本文告诉大家在使用 ObservableCollection 时,抛出 InvalidOperationException 异常,提示 Cannot change ObservableCollection 这个异常是 ObservableCollection 类型抛出的,而 ObservableCollection 类型是在 dotnet runtime 定义的,放在 System.ObjectModel 里,而且此异常可以在除 WPF 的其他框架,比如控制台或者 UWP 上复现 想要解决此问题,还请先了解一下此异常抛出的原因 在 ObservableCollection 的设计上,是可以了解列表的变更 这就让 ObservableCollection 存在一个设计上需要解决的问题,那就是如果事件 CollectionChanged 被加等两次,意味着有两次方法的调用。 要么就是继承 ObservableCollection 类型,重写 OnCollectionChanged 方法,不要修改 _blockReentrancyCount 字段。

    1.4K10编辑于 2022-08-12
  • 来自专栏CSharp编程大全

    C# ObservableCollection和List的区别

    一、ObservableCollection和List的区别 1)ObservableCollection比较简单,继承了Collection, INotifyCollectionChanged, INotifyPropertyChanged 所以再ObservableCollection这个类的方法,对数据的操作很少,重点放在了当自己本事变化的时候(不管是属性,还是集合)会调用发出通知的事件。 表示当集合对象的集合改变时,只有ObservableCollection会发出通知更新UI。 这只是他们两个区别之一。 2、举例2 以下方法可以更新ListView的UI: private ObservableCollection<PreviewListModel> _previewList = new ObservableCollection 如下方法: T tList = new List(tObjectStruct .ToList()); ObservableCollection tObjectStruct = new ObservableCollection

    2.5K10发布于 2021-02-26
  • 来自专栏林德熙的博客

    WPF 多线程下跨线程处理 ObservableCollection 数据

    具体来说就是 ObservableCollection 是可以在任意线程创建和修改的,但是由于 ObservableCollection 是非线程安全的,因此推荐是单一的时刻,仅有单个线程进行处理。 如果 ObservableCollection 被 UI 元素捕获,例如加入到 ItemsSource 里面,那么此时的 ObservableCollection 不仅只能被单一线程处理,还要求这个线程是 UI 线程 根据以上描述,可以了解到,在 WPF 里面,如果有较多数据量,想要多线程处理 ObservableCollection 集合,可以采用在非 UI 的后台线程创建 ObservableCollection 上面代码先是后台线程创建和处理 ObservableCollection 对象,接下来后台线程执行完成,通过 await 自动依靠同步上下文调度到主线程,将后台线程创建的 ObservableCollection 列表的能力,必须从业务上确保只有后台线程在访问,而 UI 线程不会对 ObservableCollection 列表进行任何的改动 在确保 UI 线程不会改动到 ObservableCollection

    5.1K10编辑于 2022-08-12
  • 来自专栏林德熙的博客

    WPF 已知问题 在 ObservableCollection 的 CollectionChanged 修改集合内容将让 UI 显示错误

    本文记录一个 WPF 已知问题,在 ObservableCollection 的 CollectionChanged 事件里面,绕过 ObservableCollection 的异常判断逻辑,强行修改集合内容 本文将告诉大家此问题的复现方法和修复方法 在 UI 绑定的 ObservableCollection 修改时,给此集合列表添加新的项目,此时 UI 绑定的数据是对的但是界面显示错误。 ToString() => Name; } 接着在 MainWindow 里添加一个 ObservableCollection<Model> 属性用于让 XAML 绑定,这里不加入一个 ViewModel 只是为了让代码简单 public ObservableCollection<Model> List { get; } = new ObservableCollection<Model>(); 监听 Loaded 用来模拟删除 ObservableCollection 的内容,用来触发 CollectionChanged 事件 先不要实现 List_CollectionChanged 和 MainWindow_Loaded

    4.2K30编辑于 2023-04-07
  • 来自专栏dotNET编程大全

    C# 扩展集合ObservableCollection使集合在添加、删除、值变更后触发事件

    01 概述 ObservableCollection继承了INotifyPropertyChanged接口,在属性变更时可以通知界面,当我把ObservableCollection集合绑定到界面的 DataGrid后,我希望在界面修改表格数值后,可以触发一个 事件来验证我界面设定数据的有效性,但是对于集合的添加、删除只会触发集合的get属性,值重置不会触发集合的get、set属性,这时候我们就需要扩展ObservableCollection { public class ItemsChangeObservableCollection<T> : System.Collections.ObjectModel.ObservableCollection

    2.5K10编辑于 2022-01-13
  • 来自专栏walterlv - 吕毅的博客

    UWP 和 WPF 不同,ListView 中绑定的集合修改顺序时,UI 的刷新规则

    ---- 试验 将 ObservableCollection<T> 用于 UI 绑定的目前只有 UWP 和 WPF,于是我写了两个 App 来验证这个问题。 猜想 UWP 真的对 ObservableCollection<T> 的 Move 操作有优化,根本就没有将移动数据的元素移除视觉树。 WPF 似乎并没有对 ObservableCollection<T> 的 Move 操作进行优化,因为 Hash 值都变了,直接就是创建了个新的。 调查 .Net Standard 统一了 ObservableCollection<T> 的 API,所以 UWP 和 WPF 这些基本的 API 是一样的。 结论 UWP 比 WPF 对 ObservableCollection<T> 的集合操作进行了更好的性能优化,在添加、删除、移动时会重用之前创建好的控件。

    3.2K10发布于 2018-09-18
  • 来自专栏林德熙的博客

    win10 uwp 通知列表

    如果希望对列表修改时,界面也变化,那么简单方法是使用 ObservableCollection。 不需要对 ObservableCollection 的属性进行通知,也就是 下面代码实际是不需要的 public ObservableCollection<string> ObservableCollection ; } } private ObservableCollection<string> _observableCollection; 如果需要修改项 如果想问,为何使用 ObservableCollection 就可以通知界面修改了元素,而使用 List 就不可以。 那么 ObservableCollection 缺少了很多东西,如添加多个元素,需要每次都进行 遍历,是不是可以自己写一个和 ObservableCollection 差不多的?

    85620发布于 2019-03-13
  • 来自专栏林德熙的博客

    WPF 列表控件数据源绑定多个数据集合方法

    如有一个显示动物列表的控件,需要绑定的数据来源是阿猫和阿狗两个 ObservableCollection 列表,不在后台代码编写合并集合的代码情况下,可以通过 XAML 的编写,绑定多个数据集合 准备 在开始之前,咱先搭建一点测试使用的代码,假定咱有一个 列表控件 准备绑定到的数据源是两个 ObservableCollection 对象,下面来定义这两个 ObservableCollection 对象和对应的 <Dog> Dogs { get; } = new ObservableCollection<Dog>(); public ObservableCollection<Cat> Cats { get; } = new ObservableCollection<Cat>(); } public class Dog : Animal { } public ObservableCollection 对象 通过 CollectionViewSource 方式 在 ListView 或 ListBox 资源里面,添加 CollectionViewSource

    4.6K21发布于 2021-05-27
  • 来自专栏林德熙的博客

    win10 uwp 通知列表

    如果希望对列表修改时,界面也变化,那么简单方法是使用 ObservableCollection。 不需要对 ObservableCollection 的属性进行通知,也就是 下面代码实际是不需要的 public ObservableCollection<string> ObservableCollection ; } } private ObservableCollection<string> _observableCollection; 如果需要修改项 如果想问,为何使用 ObservableCollection 就可以通知界面修改了元素,而使用 List 就不可以。 那么 ObservableCollection 缺少了很多东西,如添加多个元素,需要每次都进行 遍历,是不是可以自己写一个和 ObservableCollection 差不多的?

    86710发布于 2018-09-18
  • 来自专栏dotNET编程大全

    C# WPF mvvm模式下combobox绑定(list<enum>、Dictionary<int,string>)

    T>数据对象的列,因为List<T>数据对象可能会有多列; SelectedValuePath:下拉列表中,对应与显示的List<T>数据对象的列,返回的List<T>数据对象的列; 02 — 绑定ObservableCollection UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" /> </dxlc:LayoutItem> viewmodel中: public ObservableCollection <Students> StudentList { get; set; } = new ObservableCollection<Students>(); StudentList.Add(new Students UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" /> </dxlc:LayoutItem> viewmodel代码: public ObservableCollection <Students> StudentList { get; set; } = new ObservableCollection<Students>(); foreach (HumanSkinColors

    8.1K10发布于 2021-11-01
  • 来自专栏czwy的博客

    WPF中非递归(无后台代码)动态实现TreeView

    public string SchoolID { get; set; } public string SchoolName { get; set; } public ObservableCollection <Grade> listGrade { get; set; }=new ObservableCollection<Grade>() { }; } public class Grade : ObservableObject <ClassInfo> ListClass { get; set; }=new ObservableCollection<ClassInfo>() { }; } public class ClassInfo <Student> Students { get; set; }= new ObservableCollection<Student>() { }; } public class Student : 假设要绑定的数据源实例是ObservableCollection<School> schools。只需如下调用即可。

    1K40编辑于 2023-10-22
  • 来自专栏个人编程笔记

    C#-ListView的使用

    namespace Demo.ViewModel { public class ListViewDemoViewModel: NotifyPropertyObject { ObservableCollection <string> _items= new ObservableCollection<string>(); public ObservableCollection<string> Items namespace Demo.ViewModel { public class ListViewDemoViewModel: NotifyPropertyObject { ObservableCollection <ListViewModel> _items= new ObservableCollection<ListViewModel>(); public ObservableCollection

    2K20编辑于 2023-03-03
  • 来自专栏林德熙的博客

    win10 uwp 如何让一个集合按照需要的顺序进行排序

    这个列表是 ListView 他绑定了一个 ObservableCollection 所以需要对他做很少的修改。 我绑定一个数量很多的 ObservableCollection 这个ListView 不能做虚拟化,所以性能问题是如果对这个列表做的修改多,那么速度很慢。 于是我寻找了两个方法,简单的方法请看下面 private static void Sort<T>(ObservableCollection<T> list, IList<int> sort //拿出排序需要的值,插入到现在的位置 list.Move(sort[i], i); } } 这个方法性能很好,可以使用 ObservableCollection

    1K10发布于 2018-09-18
  • 来自专栏CSharp编程大全

    C# WPF控件ComboBoxEdit数据绑定及模糊匹配

    黄色 = 0, 白色 = 1, 黑色 = 2 } 群友特意提到中文,那枚举量就给个中文吧 step3: 定义枚举集合并实例化 public ObservableCollection <HumanSkinColors> HumanSkinList { get; set; } = new ObservableCollection<HumanSkinColors>(); step4:编写方法 { public MainWindow() { InitializeComponent(); } public ObservableCollection <HumanSkinColors> HumanSkinList { get; set; } = new ObservableCollection<HumanSkinColors>();

    2.6K20编辑于 2021-12-06
  • 来自专栏个人编程笔记

    C#-TreeView

    value; this.RaisePropertyChanged("IsChecked"); } } private ObservableCollection <TreeNode> m_Children = new ObservableCollection<TreeNode>(); public ObservableCollection<TreeNode System.Collections.ObjectModel; public class TreeViewDemoViewModel: NotifyPropertyObject { private ObservableCollection <TreeNode> m_TreeNodes = new ObservableCollection<TreeNode>(); public ObservableCollection<TreeNode

    1.2K10编辑于 2023-03-03
  • 来自专栏Kiba518

    【我们一起写框架】MVVM的WPF框架(三)—数据控件

    Control<T> { public Action<T> SelectCallBack = null; public ComboBox() { } public ObservableCollection <T> _ItemsSource; public ObservableCollection<T> ItemsSource { get { } } public void SetItemsSource(List<T> itemSource) { ItemsSource = new ObservableCollection ObservableCollection:我们可以看到ItemsSource是类型是ObservableCollection,而不是List。为什么要用ObservableCollection呢? 很简单,因为ObservableCollection继承了INotifyCollectionChanged,即,数据控件进行[行]的增删,也会让UI进行[行]的增删。

    3.5K30发布于 2018-09-28
  • 来自专栏JusterZhu

    04Prism WPF 入门实战 - Module

    管理对象 private IRegionManager _regionManager; private IModuleCatalog _moduleCatalog; private ObservableCollection { get { return _title; } set { SetProperty(ref _title, value); } } public ObservableCollection (_modules = new ObservableCollection<IModuleInfo>()); } public DelegateCommand LoadModules { get { return _message; } set { SetProperty(ref _message, value); } } public ObservableCollection (_contacts = new ObservableCollection<string>()); } public ContactViewModel() {

    65410编辑于 2022-12-07
  • 来自专栏hbbliyong

    WPF刷新界面之坎坷路

    原来list<T>没有数据更新的功能,这里面需要用 ObservableCollection<T> 类 或 BindingList<T> 类 代替 List 类,看ObservableCollection // UIHelper.DoEvents(); })); } ObservableCollection private void Window_Loaded(object sender, RoutedEventArgs e) { list = new ObservableCollection

    2.5K70发布于 2018-03-05
  • 来自专栏菩提树下的杨过

    Silverlight:双向绑定综合应用-自动更新集合汇总字段

    <Employee> _employeeCollection = new ObservableCollection<Employee>(); ///

    /// 公司的"员工集合" /// public ObservableCollection<Employee> EmployeeCollection 双向绑定就再一次体现了这种威力,我们把Company类改造一下: public class Company:INotifyPropertyChanged { private ObservableCollection <Employee> _employeeCollection = new ObservableCollection<Employee>(); /// /// 公司的"员工集合" /// public ObservableCollection<Employee> EmployeeCollection

    1.4K50发布于 2018-01-23
领券