BindingList<T> 类 
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
提供支持数据绑定的泛型集合。
generic <typename T>
public ref class BindingList : System::Collections::ObjectModel::Collection<T>, System::ComponentModel::IBindingList, System::ComponentModel::ICancelAddNew, System::ComponentModel::IRaiseItemChangedEventspublic class BindingList<T> : System.Collections.ObjectModel.Collection<T>, System.ComponentModel.IBindingList, System.ComponentModel.ICancelAddNew, System.ComponentModel.IRaiseItemChangedEvents[System.Serializable]
public class BindingList<T> : System.Collections.ObjectModel.Collection<T>, System.ComponentModel.IBindingList, System.ComponentModel.ICancelAddNew, System.ComponentModel.IRaiseItemChangedEventstype BindingList<'T> = class
    inherit Collection<'T>
    interface ICollection
    interface IEnumerable
    interface IList
    interface IBindingList
    interface ICancelAddNew
    interface IRaiseItemChangedEvents[<System.Serializable>]
type BindingList<'T> = class
    inherit Collection<'T>
    interface IBindingList
    interface IList
    interface ICollection
    interface IEnumerable
    interface ICancelAddNew
    interface IRaiseItemChangedEventsPublic Class BindingList(Of T)
Inherits Collection(Of T)
Implements IBindingList, ICancelAddNew, IRaiseItemChangedEvents类型参数
- T
列表中的元素类型。
- 继承
- 属性
- 实现
示例
下面的代码示例演示如何绑定到包含业务对象的 BindingList<T> 组件。 这是包含 Main 方法的完整示例。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace BindingListOfTExamples
{
    public partial class Form1 : Form
    {
        private TextBox textBox2;
        private ListBox listBox1;
        private Button button1;
        private TextBox textBox1;
        Random randomNumber = new Random();
    
        public Form1()
        {
           this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
           this.textBox1 = new System.Windows.Forms.TextBox();
           this.textBox2 = new System.Windows.Forms.TextBox();
           this.listBox1 = new System.Windows.Forms.ListBox();
           this.button1 = new System.Windows.Forms.Button();
           this.textBox1.Location = new System.Drawing.Point(169, 26);
           this.textBox1.Size = new System.Drawing.Size(100, 20);
           this.textBox1.Text = "Bracket";
           this.textBox2.Location = new System.Drawing.Point(169, 57);
           this.textBox2.ReadOnly = true;
           this.textBox2.Size = new System.Drawing.Size(100, 20);
           this.textBox2.Text = "4343";
           this.listBox1.FormattingEnabled = true;
           this.listBox1.Location = new System.Drawing.Point(12, 12);
           this.listBox1.Size = new System.Drawing.Size(120, 95);
           this.button1.Location = new System.Drawing.Point(180, 83);
           this.button1.Size = new System.Drawing.Size(75, 23);
           this.button1.Text = "Add New Item";
           this.button1.Click += new System.EventHandler(this.button1_Click);
           this.ClientSize = new System.Drawing.Size(292, 266);
           this.Controls.Add(this.button1);
           this.Controls.Add(this.listBox1);
           this.Controls.Add(this.textBox2);
           this.Controls.Add(this.textBox1);
           this.Text = "Parts Form";
           this.Load += new EventHandler(Form1_Load);
        }
    
        void Form1_Load(object sender, EventArgs e)
        {
            InitializeListOfParts();
            listBox1.DataSource = listOfParts;
            listBox1.DisplayMember = "PartName";
            listOfParts.AddingNew += new AddingNewEventHandler(listOfParts_AddingNew);
            listOfParts.ListChanged += new ListChangedEventHandler(listOfParts_ListChanged);
        }
        // Declare a new BindingListOfT with the Part business object.
        BindingList<Part> listOfParts; 
        private void InitializeListOfParts()
        {
            // Create the new BindingList of Part type.
            listOfParts = new BindingList<Part>();
    
            // Allow new parts to be added, but not removed once committed.        
            listOfParts.AllowNew = true;
            listOfParts.AllowRemove = false;
            // Raise ListChanged events when new parts are added.
            listOfParts.RaiseListChangedEvents = true;
            // Do not allow parts to be edited.
            listOfParts.AllowEdit = false;
            
            // Add a couple of parts to the list.
            listOfParts.Add(new Part("Widget", 1234));
            listOfParts.Add(new Part("Gadget", 5647));
        }
        // Create a new part from the text in the two text boxes.
        void listOfParts_AddingNew(object sender, AddingNewEventArgs e)
        {
            e.NewObject = new Part(textBox1.Text, int.Parse(textBox2.Text));
        }
        // Add the new part unless the part number contains
        // spaces. In that case cancel the add.
        private void button1_Click(object sender, EventArgs e)
        {
            Part newPart = listOfParts.AddNew();
            if (newPart.PartName.Contains(" "))
            {
                MessageBox.Show("Part names cannot contain spaces.");
                listOfParts.CancelNew(listOfParts.IndexOf(newPart));
            }
            else
            {
                textBox2.Text = randomNumber.Next(9999).ToString();
                textBox1.Text = "Enter part name";
            }
        }
        void listOfParts_ListChanged(object sender, ListChangedEventArgs e)
        {
            MessageBox.Show(e.ListChangedType.ToString());
        }
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.Run(new Form1());
        }
    }
    
    // A simple business object for example purposes.
    public class Part
    {
        private string name;
        private int number;
        public Part() { }
        public Part(string nameForPart, int numberForPart)
        {
            PartName = nameForPart;
            PartNumber = numberForPart;
        }
        public string PartName
        {
            get { return name; }
            set { name = value; }
        }
        public int PartNumber
        {
            get { return number; }
            set { number = value; }
        }
    }
}
Option Explicit On
Option Strict On
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Drawing
Imports System.Text
Imports System.Windows.Forms
Class Form1
    Inherits Form
    Private textBox2 As TextBox
    Private listBox1 As ListBox
    Private WithEvents button1 As Button
    Private textBox1 As TextBox
    Private randomNumber As New Random()
    Public Sub New()
        Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
        Me.textBox1 = New System.Windows.Forms.TextBox()
        Me.textBox2 = New System.Windows.Forms.TextBox()
        Me.listBox1 = New System.Windows.Forms.ListBox()
        Me.button1 = New System.Windows.Forms.Button()
        Me.textBox1.Location = New System.Drawing.Point(169, 26)
        Me.textBox1.Size = New System.Drawing.Size(100, 20)
        Me.textBox1.Text = "Bracket"
        Me.textBox2.Location = New System.Drawing.Point(169, 57)
        Me.textBox2.ReadOnly = True
        Me.textBox2.Size = New System.Drawing.Size(100, 20)
        Me.textBox2.Text = "4343"
        Me.listBox1.FormattingEnabled = True
        Me.listBox1.Location = New System.Drawing.Point(12, 12)
        Me.listBox1.Size = New System.Drawing.Size(120, 95)
        Me.button1.Location = New System.Drawing.Point(180, 83)
        Me.button1.Size = New System.Drawing.Size(75, 23)
        Me.button1.Text = "Add New Item"
        Me.ClientSize = New System.Drawing.Size(292, 266)
        Me.Controls.Add(Me.button1)
        Me.Controls.Add(Me.listBox1)
        Me.Controls.Add(Me.textBox2)
        Me.Controls.Add(Me.textBox1)
        Me.Text = "Parts Form"
        AddHandler Me.Load, AddressOf Form1_Load
    End Sub
    Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs)
        InitializeListOfParts()
        listBox1.DataSource = listOfParts
        listBox1.DisplayMember = "PartName"
    End Sub
    ' Declare a new BindingListOfT with the Part business object.
    Private WithEvents listOfParts As BindingList(Of Part)
    Private Sub InitializeListOfParts()
        ' Create the new BindingList of Part type.
        listOfParts = New BindingList(Of Part)
        ' Allow new parts to be added, but not removed once committed.        
        listOfParts.AllowNew = True
        listOfParts.AllowRemove = False
        ' Raise ListChanged events when new parts are added.
        listOfParts.RaiseListChangedEvents = True
        ' Do not allow parts to be edited.
        listOfParts.AllowEdit = False
        ' Add a couple of parts to the list.
        listOfParts.Add(New Part("Widget", 1234))
        listOfParts.Add(New Part("Gadget", 5647))
    End Sub
    ' Create a new part from the text in the two text boxes.
    Private Sub listOfParts_AddingNew(ByVal sender As Object, _
        ByVal e As AddingNewEventArgs) Handles listOfParts.AddingNew
        e.NewObject = New Part(textBox1.Text, Integer.Parse(textBox2.Text))
    End Sub
    ' Add the new part unless the part number contains
    ' spaces. In that case cancel the add.
    Private Sub button1_Click(ByVal sender As Object, _
        ByVal e As EventArgs) Handles button1.Click
        Dim newPart As Part = listOfParts.AddNew()
        If newPart.PartName.Contains(" ") Then
            MessageBox.Show("Part names cannot contain spaces.")
            listOfParts.CancelNew(listOfParts.IndexOf(newPart))
        Else
            textBox2.Text = randomNumber.Next(9999).ToString()
            textBox1.Text = "Enter part name"
        End If
    End Sub
    <STAThread()> _
    Shared Sub Main()
        Application.EnableVisualStyles()
        Application.Run(New Form1())
    End Sub
End Class
' A simple business object for example purposes.
Public Class Part
    Private name As String
    Private number As Integer
    Public Sub New()
    End Sub
    Public Sub New(ByVal nameForPart As String, _
        ByVal numberForPart As Integer)
        PartName = nameForPart
        PartNumber = numberForPart
    End Sub
    Public Property PartName() As String
        Get
            Return name
        End Get
        Set(ByVal value As String)
            name = Value
        End Set
    End Property
    Public Property PartNumber() As Integer
        Get
            Return number
        End Get
        Set(ByVal value As Integer)
            number = Value
        End Set
    End Property
End Class
注解
BindingList<T> 类可用作基类来创建双向数据绑定机制。 BindingList<T> 提供 IBindingList 接口的具体泛型实现。 这是实现完整的 IBindingList 接口的替代方法,由于 IBindingList、IEditableObject和关联的 CurrencyManager之间的细微交互,这一点可能很困难。 但是,典型的解决方案程序员将使用提供数据绑定功能的类,例如 BindingSource,而不是直接使用 BindingList<T>。
BindingList<T> 通过可扩展的 AddNew 方法支持工厂创建的实例。 (在其他类(如 BindingSource)中也发现了这种相同的扩展性类型)此外,由于此类实现 ICancelAddNew 接口,因此它通过 EndNew 和 CancelNew 方法启用新项的事务提交或回滚。
构造函数
| BindingList<T>() | 使用默认值初始化 BindingList<T> 类的新实例。 | 
| BindingList<T>(IList<T>) | 使用指定的列表初始化 BindingList<T> 类的新实例。 | 
属性
| AllowEdit | 获取或设置一个值,该值指示是否可以编辑列表中的项。 | 
| AllowNew | 获取或设置一个值,该值指示是否可以使用 AddNew() 方法将项添加到列表中。 | 
| AllowRemove | 获取或设置一个值,该值指示是否可以从集合中删除项。 | 
| Count | 获取实际包含在 Collection<T>中的元素数。(继承自 Collection<T>) | 
| IsSortedCore | 获取一个值,该值指示列表是否排序。 | 
| Item[Int32] | 获取或设置指定索引处的元素。(继承自 Collection<T>) | 
| Items | 获取 Collection<T>周围的 IList<T> 包装器。(继承自 Collection<T>) | 
| RaiseListChangedEvents | 获取或设置一个值,该值指示在列表中添加或删除项是否引发 ListChanged 事件。 | 
| SortDirectionCore | 获取列表排序的方向。 | 
| SortPropertyCore | 获取在派生类中实现排序时用于对列表进行排序的属性描述符;否则,返回  | 
| SupportsChangeNotificationCore | 获取一个值,该值指示是否启用 ListChanged 事件。 | 
| SupportsSearchingCore | 获取一个值,该值指示列表是否支持搜索。 | 
| SupportsSortingCore | 获取一个值,该值指示列表是否支持排序。 | 
方法
事件
| AddingNew | 在将项添加到列表中之前发生。 | 
| ListChanged | 当列表或列表中的项发生更改时发生。 |