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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

[Silverlight入门系列]使用MVVM模式(3):Model的INotifyPropertyChanged接口实现

發布時間:2023/12/13 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Silverlight入门系列]使用MVVM模式(3):Model的INotifyPropertyChanged接口实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

當客戶端綁定一個數據模型以后,數據模型變化以后可以自動通知客戶端更新界面顯示,這就是INotifyPropertyChanged接口要做的工作。INotifyPropertyChanged?接口用于向客戶端(通常是執行綁定的客戶端)發出某一屬性值已更改的通知例如,考慮一個帶有名為?FirstName?屬性的?Person?對象。?若要提供一般性屬性更改通知,則?Person?類型實現INotifyPropertyChanged?接口并在?FirstName?更改時引發?PropertyChanged?事件。?若要在將客戶端與數據源進行綁定時發出更改通知,則綁定類型應具有下列功能:實現INotifyPropertyChanged接口。

?當綁定的屬性改變時,它可以通知客戶端,并進行界面數據更新。而我們不用寫很多復雜的代碼來更新界面數據,這樣可以做到方法簡潔而清晰,松耦合和讓方法變得更通用。可用的地方太多了:例如上傳進度,實時后臺數據變更等地方。

(另:對于集合Model:INotifyCollectionChanged結接口會有ObservableCollection自動實現(見上一篇))

?

一個簡單的例子:(下面的例子中TextBlock綁定了DataContext的ModelName,點擊按鈕以后model更新,TextBlock會自動更新)

Model:?

1 public class MyModel : INotifyPropertyChanged
2 {
3 public event PropertyChangedEventHandler PropertyChanged;
4
5 public int ModelID { get; set; }
6
7 private string _ModelName;
8 public string ModelName
9 {
10 get { return _ModelName; }
11 set
12 {
13 _ModelName = value;
14
15 if (PropertyChanged != null)
16 {
17 PropertyChanged(this, new PropertyChangedEventArgs("ModelName"));
18 }
19 }
20 }
21 }

?

Silverlight頁面:?

1 <Grid x:Name="LayoutRoot" Background="White">
2 <TextBlock Height="46" HorizontalAlignment="Left" Margin="187,51,0,0" Name="textBlock1" Text="{Binding ModelName}" VerticalAlignment="Top" Width="94" />
3 <Button Content="update" Height="39" HorizontalAlignment="Left" Margin="187,120,0,0" Name="button1" VerticalAlignment="Top" Width="106" Click="button1_Click" />
4 ?</Grid>

?

頁面代碼:?

1 public MyView()
2 {
3 InitializeComponent();
4
5 MyModel m1 = new MyModel() { ModelID = 1, ModelName = "abc" };
6
7 this.DataContext = m1;
8 }
9
10 ?private void button1_Click(object sender, RoutedEventArgs e)
11 {
12 (this.DataContext as MyModel).ModelName = "abc_changed";
13 }

甚至還有一個VS2010插件來完成這個工作:NotifyPropertyWeaver

ViewModel也可以實現INotifyPropertyChanged接口,很簡單:

XAML綁定集合:

1 <DataGrid ItemsSource="{Binding Path=LineItems}" />

?

ViewModel代碼:

1 public class OrderViewModel : INotifyPropertyChanged
2 {
3 public OrderViewModel( IOrderService orderService )
4 {
5 this.LineItems = new ObservableCollection<OrderLineItem>(
6 orderService.GetLineItemList() );
7 }
8
9 public ObservableCollection<OrderLineItem> LineItems { get; private set; }
10 }

轉載于:https://www.cnblogs.com/Areas/archive/2011/09/07/2169875.html

總結

以上是生活随笔為你收集整理的[Silverlight入门系列]使用MVVM模式(3):Model的INotifyPropertyChanged接口实现的全部內容,希望文章能夠幫你解決所遇到的問題。

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