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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

什么是 Change Notification,为什么它很重要(译)

發布時間:2025/4/5 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 什么是 Change Notification,为什么它很重要(译) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

[我自己嘗試做的翻譯,呵呵]

屬性改變通知
(Property Change Notification)

有關Windows窗體數據綁定的最重要的一個概念是,它是由更改通知(change notification)驅動的。也就是說,除非數據源通知Windows窗體數據綁定運行時數據已經發生了改變(通過提供一個更改事件),否則,Windows窗體不會更新一個用戶界面元素(控件)。對于簡單的屬性對屬性的綁定,數據源需要提供一個屬性更改通知,這可以通過提供一個屬性的“屬性名”已更改事件(比如為Customer對象的Name屬性提供NameChanged事件)或者實現“INotifyPropertyChanged”接口,INotifyPropertyChangedVS 2005中新增的一個接口,它可以與BindingList<T>一起使用來創建可綁定的列表(下面會有描述)

例子:不用更改通知的簡單綁定

/*******************************************************************

?* 設置(使用 Visual Studio 窗體設計器):

?*

?*? 添加一個 Label 控件到窗體Form (label1)

?*? 添加一下代碼到 Form.Load 事件處理方法中

?******************************************************************/

?

CurrentTime currentTime = new CurrentTime();

?

/*******************************************************************

?* 綁定Label.Text (string) CurrentTime.Now

?* 注意: 當“Now”改變時Label控件將不會更新

?* 因為“Now”沒有提供更改通知.

?******************************************************************/

?

Binding binding = new Binding("Text", currentTime, "Now", true);

binding.FormatString = "MM/dd/yyyy hh:MM:ss";

?

this.label1.DataBindings.Add(binding);

?

/***********************************************************************

*設置(使用 Visual Studio 窗體設計器):

*

*? 添加一個新的類文件到你的工程,叫做 "CurrentTime"

*? 添加一下代碼到類的實現中

**********************************************************************/

?

public class CurrentTime

{

??? System.Windows.Forms.Timer????? _timer;

?

??? public CurrentTime()

??? {

??????? /***************************************************************

??????? * 使用一個跟蹤當前時間的計時器

??????? ***************************************************************/

???????

??????? _timer = new System.Windows.Forms.Timer();

?

???? ???/***************************************************************

??????? * 每秒鐘更新一次時間

??????? ***************************************************************/

?

??????? _timer.Interval = 1000;

??????? _timer.Tick += delegate { this.Now = DateTime.Now; };

??????? _timer.Start();

??? }

?

??? /*******************************************************************

??? * 使用一個保存當前時間的變量

??? *******************************************************************/

?

??? private DateTime _now = DateTime.Now;

?

??? /*******************************************************************

??? *沒有更改通知被綁定的控件將不會被更新

??? *******************************************************************/

?

??? public DateTime Now

??? {

??????? get { return _now; }

??????? private set

??????? {

??????? ????if (_now != value)

??????????? {

??????????????? _now = value;

??????????? }

??????? }

??? }

}

例子:含有“屬性”已更改的更改通知的簡單數據綁定

/***********************************************************************

* 設置(使用 Visual Studio 窗體設計器):

* 使用和上面的例子中一樣的窗體,但是改變了 “CurrentTime”類型,為“Now”屬性提供了更改通知

* 這個例子使用“屬性”已更改模式。Label控件的文本在這個例子中將會正確的更新

***********************************************************************/

?

public class CurrentTime

{

??? System.Windows.Forms.Timer????? _timer;

?

??? public CurrentTime()

??? {

??????? /***************************************************************

??????? *使用一個跟蹤當前時間的計時器

??????? ***************************************************************/

???????

??????? _timer = new System.Windows.Forms.Timer();

?

??????? /***************************************************************

??????? *每秒鐘更新一次時間

??????? ***************************************************************/

?

??????? _timer.Interval = 1000;

??????? _timer.Tick += delegate { this.Now = DateTime.Now; };

??????? _timer.Start();

??? }

?

??? /*******************************************************************

??? *使用一個保存當前時間的變量

??? *******************************************************************/

?

??? private DateTime _now = DateTime.Now;

?

??? /*******************************************************************

??? * 屬性更改通知被激發當這個屬性更改時,被綁定的用戶界面元素將會更新

??? * 這里使用的是“屬性”已更改模式

??? *******************************************************************/

?

??? public DateTime Now

??? {

??????? get { return _now; }

??????? private set

??????? {

??? ????????if (_now != value)

??????????? {

??????????????? _now = value;

??????????? ????OnNowChanged(EventArgs.Empty);

??????? ????}

??? ????}

??? }

?

??? /*******************************************************************

??? * 提供一個屬性已更改事件

??? *******************************************************************/

?

??? public event EventHandler NowChanged;

?

??? protected virtual void OnNowChanged(EventArgs e)

??? {

??? ????if (null != NowChanged)

??? ????{

? ??????????NowChanged(this, e);

?? ?????}

??? }

}

例子:含有INotifyPropertyChanged更改通知的簡單數據綁定

/***********************************************************************

*設置(使用 Visual Studio 窗體設計器):

*

* 使用上個例子中一樣的窗體,但使用這個版本的CurrentTime類型做了替換.

*

* 這個例子實現了 System.ComponentModel.INotifyPropertyChanged接口.

* 這個例子中的label的文本也會正確的被更新.

**********************************************************************/

?

using System.ComponentModel;

?

public class CurrentTime : INotifyPropertyChanged

{

??? System.Windows.Forms.Timer????? _timer;

?

??? public CurrentTime()

??? {

??????? /***************************************************************

??????? *使用一個跟蹤當前時間的計時器

??????? ***************************************************************/

???????

??????? _timer = new System.Windows.Forms.Timer();

?

??????? /***************************************************************

??????? *每秒鐘更新一次時間

??????? ***************************************************************/

?

??????? _timer.Interval = 1000;

??????? _timer.Tick += delegate { this.Now = DateTime.Now; };

??????? _timer.Start();

??? }

?

??? /*******************************************************************

??? *使用一個保存當前時間的變量

??? *******************************************************************/

?

??? private DateTime _now = DateTime.Now;

?

??? /*******************************************************************

??? *屬性更改通知被激發當這個屬性更改時,被綁定的用戶界面元素將會更新

??? *

??? * 這里使用 INotifyPropertyChanged 接口

??? *******************************************************************/

?

??? public DateTime Now

??? {

??????? get { return _now; }

??????? private set

??????? {

??????????? if (_now != value)

??????????? {

??????????????? _now = value;

??????????????? OnPropertyChanged(“Now”);

??????? ????}

??????? }

??? }

?

??? /*******************************************************************

??? * 提供 INotifyPropertyChanged.PropertyChanged 事件

??? *******************************************************************/

?

??? public event PropertyChangedEventHandler PropertyChanged;

?

??? protected virtual void OnPropertyChanged(string propertyName)

??? {

??? ????OnPropertyChanged(new PropertyChangedEventArgs(propertyName));

??? }

?

??? protected virtual void OnPropertyChanged(PropertyChangedEventArgs e)

??? {

???? ???if (null != PropertyChanged)

??? ????{

???? ???????PropertyChanged(this, e);

???? ???}

??? }

}

?

列表更改通知

當數據源是一個列表的時候(復雜的或簡單的綁定列表),數據源需要通過IbindingList接口提供列表和屬性2個更改通知。列表更改通知用來在一個條目從列表中移除、刪除或者新增到列表的時候通知用戶界面元素。一個列表上的屬性更改通知用來在列表中的某一項上的一個屬性(比如列表的第N個位置上的Customer實例的“Name”屬性)發生更改時通知用戶界面元素。Windows窗體中列表綁定的一個關鍵概念是,IbindingList接口既提供依據列表的更改通知,又提供基于屬性的更改通知。換句話說,這是一個比較關鍵的地方,被綁定到一個列表的Windows窗體控件將不會監聽列表中的項目提供的屬性更改通知,而是,Windows窗體需要列表為它所包含的項目提供這種通知。

VS 2005之前,實現IBindingList會在列表和列表中所包含的項之間形成強耦合,因為包含的那些項需要在他們發生改變時告訴列表。在VS2005中,這通過引入BindingList<T>INotifyPropertyChanged接口得到簡化。BindingList<T>是一個IBindingList的泛型實現,它可以自動的將子項的INotifyPropertyChanged事件轉換到IBindingList.ListChanged事件(譯者注:這里有些疑問,為什么不轉換成PropertyChanged事件呢,還需要求證

注意,如果列表是通過BindingSource綁定的話,那種綁定到一個不是IBindingList的基于列表的數據源的體驗可能會改善很多。

轉載于:https://www.cnblogs.com/Ricky81317/archive/2006/12/25/601015.html

總結

以上是生活随笔為你收集整理的什么是 Change Notification,为什么它很重要(译)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 亚洲无人区码一码二码三码的含义 | 24小时日本在线www免费的 | av在线一 | 亚洲国产中文字幕 | 精品一区久久 | 亚洲另类av | 欧美黑人一区二区 | 欧美变态绿帽cuckold | 国产二区三区视频 | 久久久精品 | 在线不卡免费av | 亚洲色图21p | 性巴克成人免费网站 | 假日游船法国满天星 | 综合精品久久 | 黄色三级三级三级 | 欧美高清视频一区 | 在线观看中文字幕2021 | 成人高潮片 | 亚洲黄色片子 | 亚洲一区二区三区久久久成人动漫 | 99热久 | 在线欧美一区二区 | 精品国产三级片在线观看 | 免费网站在线观看人数在哪动漫 | 欧美一级片在线免费观看 | 特级a毛片| 久草福利资源在线 | 久久国产高清 | 日本女人毛茸茸 | 娇妻被老王脔到高潮失禁视频 | 99999av| 成年人在线视频免费观看 | 午夜电影天堂 | 亚洲人成电影在线 | www.视频一区 | 精品久久精品久久 | 啪啪精品| 色婷婷小说 | 蜜臀一区| 五月亚洲| 麻豆传媒一区二区 | 日本十八禁视频无遮挡 | 国产精品一二三区 | 国产女同在线观看 | 女女调教被c哭捆绑喷水百合 | 我要操婊 | 综合网婷婷| 色婷五月 | 少妇逼逼 | 都市激情亚洲综合 | 日韩视频免费在线播放 | 日韩欧美手机在线 | 亚洲天堂影院在线观看 | 情不自禁电影 | 日本一区不卡视频 | 国产精品资源站 | 黄网站免费大全入口 | 在线 日本 制服 中文 欧美 | 亚洲精品久久久久国产 | 成人免费小视频 | 亚洲男人第一天堂 | 新久草视频 | 久久一区二区三区四区 | 日本视频黄色 | 综合视频在线观看 | 日本国产精品一区 | 特级黄色网 | 免费黄网在线看 | 亚洲国产午夜 | 国产精品18久久久久久vr下载 | 色婷婷综合久久 | 性一交一乱一透一a级 | 国产免费一区二区三区最新不卡 | 日韩精品一区二区三区电影 | 狼人综合伊人 | 免费在线观看www | 日韩欧美激情视频 | 少妇精品久久久一区二区三区 | 日本欧美一区二区三区 | 国产一级片免费视频 | 爆乳2把你榨干哦ova在线观看 | 色姑娘av | 香蕉污视频 | 一区二区伊人 | 秋霞影院午夜 | jizzjizz在线观看 | 日日射天天操 | 三上悠亚人妻中文字幕在线 | 亚洲图片一区二区三区 | 黑人精品欧美一区二区蜜桃 | 天堂av√ | 亚洲成熟丰满熟妇高潮xxxxx | 卡通动漫av | 国产高清免费av | 亚洲AV无码AV吞精久久中文版 | 天天拍夜夜拍 | 蜜乳av一区二区三区 | 国产精品日韩欧美一区二区三区 |