WPF ObservableCollectionT 与 BindingListT

作者:编程家 分类: swift 时间:2025-08-02

使用WPF ObservableCollection 与 BindingList 实现数据绑定

在WPF应用程序开发中,数据绑定是一项重要的功能,它能够帮助我们将数据与界面元素进行关联,实现数据的动态更新。WPF提供了多种数据绑定的方式,其中两种常用的方式是使用ObservableCollection 和 BindingList。本文将介绍这两种数据绑定方式的特点和用法,并通过案例代码进行演示。

ObservableCollection 是WPF中提供的一种集合类型,它实现了INotifyCollectionChanged 接口,可以实时通知界面元素集合的变化。当集合中的元素增加、删除或者发生其他变化时,界面元素能够及时地进行更新。

BindingList 则是.NET Framework中提供的一种集合类型,它实现了IBindingList 接口,也能够实时通知界面元素集合的变化。ObservableCollection 和 BindingList 都可以作为WPF的数据源,用于绑定到界面元素上。

ObservableCollection的用法

ObservableCollection 的用法非常简单,我们只需要在XAML中声明一个ObservableCollection 类型的属性,并将其绑定到界面上的元素上,就可以实现数据的绑定。下面是一个简单的示例代码:

csharp

// 定义一个Person类

public class Person

{

public string Name { get; set; }

public int Age { get; set; }

}

// 在ViewModel中声明一个ObservableCollection类型的属性

public class MainViewModel : INotifyPropertyChanged

{

private ObservableCollection _personList;

public ObservableCollection PersonList

{

get { return _personList; }

set { _personList = value; OnPropertyChanged(); }

}

public MainViewModel()

{

// 初始化PersonList集合

PersonList = new ObservableCollection();

// 添加几个Person对象

PersonList.Add(new Person { Name = "张三", Age = 20 });

PersonList.Add(new Person { Name = "李四", Age = 25 });

PersonList.Add(new Person { Name = "王五", Age = 30 });

}

// INotifyPropertyChanged接口的实现代码省略

}

在上述代码中,我们定义了一个Person类,包含了Name和Age两个属性。然后在MainViewModel中声明了一个ObservableCollection 类型的属性PersonList,并在构造函数中初始化了该集合,并添加了几个Person对象。

接下来,我们可以在XAML中将PersonList绑定到ListBox控件上,通过设置ItemTemplate来显示每个Person对象的Name和Age属性。当PersonList集合发生变化时,界面上的ListBox控件会自动更新。

xaml

BindingList的用法

BindingList 的用法与ObservableCollection 类似,也需要在XAML中声明一个BindingList 类型的属性,并将其绑定到界面上的元素上。下面是一个示例代码:

csharp

// 在ViewModel中声明一个BindingList类型的属性

public class MainViewModel : INotifyPropertyChanged

{

private BindingList _personList;

public BindingList PersonList

{

get { return _personList; }

set { _personList = value; OnPropertyChanged(); }

}

public MainViewModel()

{

// 初始化PersonList集合

PersonList = new BindingList();

// 添加几个Person对象

PersonList.Add(new Person { Name = "张三", Age = 20 });

PersonList.Add(new Person { Name = "李四", Age = 25 });

PersonList.Add(new Person { Name = "王五", Age = 30 });

}

// INotifyPropertyChanged接口的实现代码省略

}

在上述代码中,我们同样定义了一个Person类,并在MainViewModel中声明了一个BindingList 类型的属性PersonList,并在构造函数中初始化了该集合,并添加了几个Person对象。

然后,我们可以将PersonList绑定到ListBox控件上,同样通过设置ItemTemplate来显示每个Person对象的Name和Age属性。

xaml

在本文中,我们分别介绍了WPF中的ObservableCollection 和 BindingList 两种数据绑定方式的特点和用法,并通过案例代码进行了演示。无论是使用ObservableCollection 还是BindingList,都可以实现界面元素与数据的实时更新,提高了WPF应用程序的开发效率。在实际项目中,我们可以根据具体需求选择合适的数据绑定方式,来满足不同的开发需求。