BindingList.ListChanged搭配INotifyPropertyChanged (修改自MSDN)

ExpandedBlockStart.gif 代码
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());

        customerList.ListChanged 
+=  ListChangedHandlingMethod;

        
//  ListChanged event is fired no matter whether the item which would be added implements INotifyPropertyChanged  
        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;
    }

    
//  The method is called out if a registered item implements INotifyPropertyChanged
     public   void  ListChangedHandlingMethod( object  sender, EventArgs e)
    {
        ListChangedEventArgs k 
=  (ListChangedEventArgs)e;
        
if  (k.ListChangedType  ==  ListChangedType.ItemAdded)
            MessageBox.Show(
" Item Added " );
        
else   if (k.ListChangedType  ==  ListChangedType.ItemChanged)
            MessageBox.Show(
" Item Changed " );
    }

    
//  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  =   " c " ;
        
//        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 2009-10-08 10:09 進哥 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/euleramon/archive/2009/10/08/1578976.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值