INotifyPropertyChanged 接口

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

名空间:    System.Component Mod el
程序集:  
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 " );
            }
        }
    }
}

 

转载于:https://www.cnblogs.com/zhangtao/archive/2011/04/09/2010509.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值