天天看点

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。

如果喜欢我的文章,那么


“在看”和转发是对我最大的支持!