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。

 
 
如果喜欢我的文章,那么

“在看”和转发是对我最大的支持!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值