日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

INotifyPropertyChanged 接口

發布時間:2025/1/21 编程问答 101 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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");
????????????}
????????}
????}
}

?

轉載于:https://www.cnblogs.com/zhangtao/archive/2011/04/09/2010509.html

總結

以上是生活随笔為你收集整理的INotifyPropertyChanged 接口的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。