天天看點

wpf中 fody的介紹

WPF中的集合變更通知是指當集合中的元素發生改變時,WPF能夠自動感覺這些變化,并向UI界面發送通知進行更新。常見的集合變更通知有INotifyCollectionChanged接口和ObservableCollection類。

1. INotifyCollectionChanged接口

INotifyCollectionChanged接口是WPF中集合變更通知的基本接口,它定義了一個CollectionChanged事件,用于通知界面集合的變化。如果我們使用自己實作的集合類,可以實作INotifyCollectionChanged接口,并在集合的Add、Remove、Clear等方法中觸發CollectionChanged事件。

```csharp              public class MyCollection<T> : IEnumerable<T>, INotifyCollectionChanged              {              private List<T> list = new List<T>();                      public void Add(T item)              {              list.Add(item);              OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, item));              }                      //...                      public event NotifyCollectionChangedEventHandler CollectionChanged;                      protected virtual void OnCollectionChanged(NotifyCollectionChangedEventArgs e)              {              CollectionChanged?.Invoke(this, e);              }              }              ```           

在上面的代碼中,我們自己實作了一個MyCollection類,并實作了INotifyCollectionChanged接口。在集合的Add方法中,我們觸發了CollectionChanged事件,并傳入一個NotifyCollectionChangedEventArgs對象,表示集合的Add操作。

2. ObservableCollection類

ObservableCollection類是WPF中提供的一個具體的集合類,它實作了INotifyCollectionChanged接口和IEnumerable接口,并提供了一系列集合操作方法。使用ObservableCollection類,我們可以友善地在界面上實作集合變更通知。

```csharp              public class MyViewModel : INotifyPropertyChanged              {              private ObservableCollection<string> items = new ObservableCollection<string>();                      public ObservableCollection<string> Items              {              get { return items; }              set              {              items = value;              OnPropertyChanged(nameof(Items));              }              }                      //...                      public void AddItem(string item)              {              Items.Add(item);              }                      //...              }              ```           

在上面的代碼中,我們在ViewModel中使用了一個ObservableCollection對象,并提供了AddItem方法向集合中添加新元素。當集合中的元素發生變化時,WPF會自動感覺這些變化,并向UI界面發送通知進行更新。

3. Fody

Fody是一個.NET應用程式編織器,可以通過自動化注入代碼來增強.NET程式的功能。在WPF中,Fody可以用于自動實作INotifyPropertyChanged接口和INotifyCollectionChanged接口。

在使用Fody時,我們需要在項目中安裝Fody和PropertyChanged.Fody等相關NuGet包,并在ViewModel類中使用[AddINotifyPropertyChangedInterface]和[AddINotifyCollectionChangedInterface]等注解來标記需要注入的接口。

```csharp              using PropertyChanged;                      [AddINotifyPropertyChangedInterface]              [AddINotifyCollectionChangedInterface]              public class MyViewModel              {              public ObservableCollection<string> Items { get; set; } = new ObservableCollection<string>();                      //...              }              ```           

在上面的代碼中,我們在ViewModel類中使用了[AddINotifyPropertyChangedInterface]和[AddINotifyCollectionChangedInterface]注解,來自動實作INotifyPropertyChanged接口和INotifyCollectionChanged接口。這樣,在ViewModel中的屬性和集合發生變化時,WPF會自動感覺這些變化,并向UI界面發送通知進行更新。

需要注意的是,使用Fody注入代碼會影響程式的可讀性和可維護性,是以應該根據實際情況選擇是否使用Fody。

如果喜歡我的文章,那麼


“在看”和轉發是對我最大的支援!