gpt4 book ai didi

c# - PropertyChangedEventHandler 和 NotifyCollectionChangedEventHandler 有什么区别?

转载 作者:行者123 更新时间:2023-11-30 22:28:40 26 4
gpt4 key购买 nike

我认为两者是一样的,但为什么两者都用在同一个方法中呢?我认为有一点不同。下面是一些代码来显示两者之间的区别:

private void LoadItemListing()
{
_items = new ObservableCollection<SalesItemListingViewModel>();

foreach (ItemListing x in _sales.Items)
{
SalesItemListingViewModel itemListing = new SalesItemListingViewModel(x);
_items.Add(itemListing);
_itemAmountSum += itemListing.Amount;

itemListing.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(itemListing_PropertyChanged);
}

_items.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(_items_CollectionChanged);
}

对于 itemListing_PropertyChanged:

void itemListing_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
if (e.PropertyName == "Amount")
{
ItemAmountSum = 0;
foreach (SalesItemListingViewModel x in Items)
ItemAmountSum += x.Amount;
}
}

还有 _items_CollectionChanged 的​​代码:

void _items_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add)
{
SalesItemListingViewModel newItemListingViewModel = e.NewItems[0] as SalesItemListingViewModel;
newItemListingViewModel.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(itemListing_PropertyChanged);
}
else if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Remove)
{
ItemAmountSum = 0;
foreach (SalesItemListingViewModel x in Items)
ItemAmountSum += x.Amount;
}

RaisePropertyChanged("Items");
}

我觉得有区别,但我不确定。有人可以解释一下有什么不同吗?

最佳答案

PropertyChanged 表示属性的值 已更改。 CollectionChanged 事件表明集合的内容 已更改(不是集合本身:它仍然是同一个集合实例,但元素已被添加/删除/替换)。

关于c# - PropertyChangedEventHandler 和 NotifyCollectionChangedEventHandler 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10670259/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com