• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
悠
閒

博客园    首页       联系   管理    订阅  订阅
INotifyPropertyChanged 接口(转)

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

命名空间:   System.ComponentModel
程序集:   System(在 System.dll 中)

语法 :
public interface INotifyPropertyChanged

public interface class 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(800, 200);
       
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(
this, new 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");
            }
        }
    }
}

posted on 2011-05-18 10:06  悠閒  阅读(398)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3