如何订阅从C#中的任何集合元素激发的事件?
我制作了以下字典,我希望能够订阅从其任何元素激发的事件,以便知道哪些字典元素的属性已更改 这是我的班级:如何订阅从C#中的任何集合元素激发的事件?,c#,dictionary,events,C#,Dictionary,Events,我制作了以下字典,我希望能够订阅从其任何元素激发的事件,以便知道哪些字典元素的属性已更改 这是我的班级: public class BlockInput : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public void NotifyPropertyChanged(string PropertyName) { PropertyC
public class BlockInput : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyPropertyChanged(string PropertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(PropertyName));
}
private int _value;
public int Value
{
get
{
return _value;
}
set
{
_value = Value;
NotifyPropertyChanged("Value");
}
}
}
我创建了一个并发字典,如下所示:
public ConcurrentDictionary<string, BlockInput> Inputs;
公共ConcurrentDictionary输入;
如何实现这一点,以便我在每次触发每个元素的一个BlockInput值发生更改/事件时都能找到
谢谢您的时间。我认为您除了自己手动订阅所有活动外,没有其他方法:
foreach(Inputs.Values中的BlockInput项){
item.PropertyChanged+=块输入_PropertyChanged;
}
private void BlockInput\u PropertyChanged(对象发送方,PropertyChangedEventArgs e){
var blockInput=sender as blockInput;//获取已更改的项
//做事
}
如果您计划在实际使用此界面(主要是MVVM)时从
字典中添加或删除项目,则您必须订阅所有添加的项目,并取消订阅已删除的项目。通常这就足够了。您让GUI类完成订阅事件的所有管道工作。您只需提供3个更改通知:
块输入的每个属性之一。您在示例代码中做到了这一点
如果从集合中添加或删除了某些内容,则为。这就是observateCollection
将要解决的问题。这也是组委会唯一要处理的事情
属性上公开可观察集合的那一个。OC在批量修改方面是出了名的糟糕,所以通常需要在代码中准备一个新实例,而公开是最后一步
如果您没有MVVM用例,请留下评论。除了手动订阅每个事件外,我可以想出两种方法