INotifyPropertyChanged 接口

向客户端发出某一属性值已更改的通知。

名空间:   System.ComponentModel
程序集:  
System(在 System.dll 中)
语法
public interface INotifyPropertyChanged

备注
INotifyPropertyChanged
接口用于向客户端(通常是执行绑定的客户端)发出某一属性值已更改的通知。

例如,考虑一个带有名为 FirstName 属性的 Person 对象。
若要提供一般性属性更改通知,则
Person 类型实现 INotifyPropertyChanged 接口并在 FirstName 更改时引发 PropertyChanged 事件。

若要在将客户端与数据源进行绑定时发出更改通知,则绑定类型应具有下列任一功能:

  • 实现 INotifyPropertyChanged 接口(首选)。

  • 为绑定类型的每个属性提供更改事件。

不执行上述这两个功能。

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.Common;
using System.Diagnostics;
using System.Drawing;
using System.Data.SqlClient;
using System.Windows.Forms;

// This form demonstrates using a BindingSource to bind
// a list to a DataGridView control. The list does not
// raise change notifications, however the DemoCustomer type 
// in the list does.
public class Form1 : System.Windows.Forms.Form
{
    
// This button causes the value of a list element to be changed.
    private Button changeItemBtn = new Button();

    
// This DataGridView control displays the contents of the list.
    private DataGridView customersDataGridView = new DataGridView();

    
// This BindingSource binds the list to the DataGridView control.
    private BindingSource customersBindingSource = new BindingSource();

    
public Form1()
    {
        
// Set up the "Change Item" button.
        this.changeItemBtn.Text = "Change Item";
        
this.changeItemBtn.Dock = DockStyle.Bottom;
        
this.changeItemBtn.Click +=
            
new EventHandler(changeItemBtn_Click);
        
this.Controls.Add(this.changeItemBtn);

        
// Set up the DataGridView.
        customersDataGridView.Dock = DockStyle.Top;
        
this.Controls.Add(customersDataGridView);

        
this.Size = new Size(800200);
        
this.Load += new EventHandler(Form1_Load);
    }

    
private void Form1_Load(System.Object sender, System.EventArgs e)
    {
        
// Create and populate the list of DemoCustomer objects
        
// which will supply data to the DataGridView.
        BindingList<DemoCustomer> customerList = new BindingList<DemoCustomer>();
        customerList.Add(DemoCustomer.CreateNewCustomer());
        customerList.Add(DemoCustomer.CreateNewCustomer());
        customerList.Add(DemoCustomer.CreateNewCustomer());

        
// Bind the list to the BindingSource.
        this.customersBindingSource.DataSource = customerList;

        
// Attach the BindingSource to the DataGridView.
        this.customersDataGridView.DataSource =
            
this.customersBindingSource;
    }

    
// Change the value of the CompanyName property for the first 
    
// item in the list when the "Change Item" button is clicked.
    void changeItemBtn_Click(object sender, EventArgs e)
    {
        
// Get a reference to the list from the BindingSource.
        BindingList<DemoCustomer> customerList =
            
this.customersBindingSource.DataSource as BindingList<DemoCustomer>;

        
// Change the value of the CompanyName property for the 
        
// first item in the list.
        customerList[0].CustomerName = "Tailspin Toys";
        customersBindingSource.ResetItem(
0);
    }

    [STAThread]
    
static void Main()
    {
        Application.EnableVisualStyles();
        Application.Run(
new Form1());
    }
}

// This is a simple customer class that 
// implements the IPropertyChange interface.
public class DemoCustomer  : INotifyPropertyChanged
{
    
// These fields hold the values for the public properties.
    private Guid idValue = Guid.NewGuid();
    
private string customerNameValue = String.Empty;
    
private string phoneNumberValue = String.Empty;

    
public event PropertyChangedEventHandler PropertyChanged;

    
private void NotifyPropertyChanged(String info)
    {
        
if (PropertyChanged != null)
        {
            PropertyChanged(
thisnew PropertyChangedEventArgs(info));
        }
    }

    
// The constructor is private to enforce the factory pattern.
    private DemoCustomer()
    {
        customerNameValue 
= "Customer";
        phoneNumberValue 
= "(555)555-5555";
    }

    
// This is the public factory method.
    public static DemoCustomer CreateNewCustomer()
    {
        
return new DemoCustomer();
    }

    
// This property represents an ID, suitable
    
// for use as a primary key in a database.
    public Guid ID
    {
        
get
        {
            
return this.idValue;
        }
    }

    
public string CustomerName
    {
        
get
        {
            
return this.customerNameValue;
        }

        
set
        {
            
if (value != this.customerNameValue)
            {
                
this.customerNameValue = value;
                NotifyPropertyChanged(
"CustomerName");
            }
        }
    }

    
public string PhoneNumber
    {
        
get
        {
            
return this.phoneNumberValue;
        }

        
set
        {
            
if (value != this.phoneNumberValue)
            {
                
this.phoneNumberValue = value;
                NotifyPropertyChanged(
"PhoneNumber");
            }
        }
    }
}
原文地址:https://www.cnblogs.com/zhangtao/p/2010509.html