• WPF ObservableCollection 和 BindingList 有什么区别


    ObservableCollectionBindingList都是.NET Framework中的泛型集合类型,它们都支持数据绑定和元素的增加、删除、修改等操作。然而,它们之间存在一些关键的差异,使它们在不同的场景下更有用。

    ObservableCollection:

    ObservableCollection是用于WPF数据绑定的首选集合。它实现了INotifyCollectionChanged接口,这意味着当集合中的元素被添加、删除或整个列表被刷新时,它会提供通知,这对于绑定到WPF UI元素(例如ListBoxItemsControl)是必要的。

    ObservableCollection还实现了INotifyPropertyChanged接口,因此当集合中的元素被替换或者Count属性发生改变时,它也会提供通知。

    BindingList:

    BindingList是.NET Framework 2.0引入的,主要用于Windows Forms数据绑定。它提供了一些ObservableCollection没有的特性,如排序和搜索支持,但这些特性通常在WPF中不常用或有其他方式实现。

    BindingList实现了IBindingList接口,该接口提供了对数据源列表更改的通知,包括添加、删除、修改等操作。

    总结

    • ObservableCollection通常是WPF数据绑定的首选集合,它在集合变更时提供通知。
    • BindingList主要用于Windows Forms数据绑定,提供了排序和搜索支持。
    • 两者都实现了对数据源列表更改的通知,但在不同的上下文和用例中,一种可能比另一种更有用。

    在选择使用哪种类型时,你应考虑你的特定需求和你正在使用的UI框架。如果你正在开发WPF应用程序,那么ObservableCollection可能是最好的选择。如果你正在开发Windows Forms应用程序,那么BindingList可能更适合你的需求。

    以下是使用ObservableCollectionBindingList的示例代码。

    ObservableCollection 示例:

    // 创建ObservableCollection
    ObservableCollection<string> collection = new ObservableCollection<string>();
    
    // 订阅CollectionChanged事件
    collection.CollectionChanged += (s, e) => {
        Console.WriteLine("Collection changed: {0}", e.Action);
    };
    
    // 添加元素
    collection.Add("Item 1");
    
    // 删除元素
    collection.Remove("Item 1");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在上述的例子中,当你向collection添加或删除元素时,你会看到在控制台上打印出相应的更改通知。

    BindingList 示例:

    // 创建BindingList
    BindingList<string> bindingList = new BindingList<string>();
    
    // 订阅ListChanged事件
    bindingList.ListChanged += (s, e) => {
        Console.WriteLine("List changed: {0}", e.ListChangedType);
    };
    
    // 添加元素
    bindingList.Add("Item 1");
    
    // 删除元素
    bindingList.Remove("Item 1");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在这个例子中,当你向bindingList添加或删除元素时,你会看到在控制台上打印出相应的更改通知。

    这些示例都是在控制台应用程序中运行的。在实际的WPF或Windows Forms应用程序中,你可能会在更改集合时更新UI,而不是在控制台上打印消息。

  • 相关阅读:
    【老卫搞机】090期:键盘?主机?全功能键盘主机!
    window下VS2022封装静态库以及调用静态库
    Revit中幕墙嵌入墙中不显示问题-【图纸生成墙】
    VSCode远程连接服务器报错:Could not establish connection to “xxxxxx”的可能错误原因及解决
    服务架构(SOA)的汽车软件
    人才资源开发杂志人才资源开发杂志社人才资源开发编辑部2022年第15期目录
    小tips;CSS和JS“通信”
    【小尘送书-第六期】《巧用ChatGPT轻松玩转新媒体运营》AI赋能运营全流程,帮你弯道超车、轻松攀登运营之巅
    【控制】基于PID实现水箱控制系统matlab代码
    【BOOST C++ 13 并行编程】(1) Boost.Thread
  • 原文地址:https://blog.csdn.net/yao_hou/article/details/134431237