sof*_*fun 0 c# wpf xaml observablecollection
private ObservableCollection<Employee> models = new ObservableCollection<Employee>();
Run Code Online (Sandbox Code Playgroud)
我的模型有2个字段(Name和一个布尔字段调用activeDuty)
在我的构造函数中,我
this.models.CollectionChanged += this.OnCollectionChanged;
void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
void OnItemPropertyChanged(object sender, PropertyChangedEventArgs e)
Run Code Online (Sandbox Code Playgroud)
我从来没有使用过ObservableCollection,有人可以告诉我如何检测activeDuty字段是否被修改?(我做了一些挖掘并看到很多关于OnCollectionChanged和OnItemPropertyChanged的帖子但是没有理解差异或为什么一个比另一个更受欢迎
ObservableCollection.CollectionChanged将项目添加到集合或从集合中删除时引发.ObservableCollection还实现了INotifyPropertyChanged,只是为了改变自己的个人财产而提出通知- 因此在添加或删除项目时也会PropertyChanged为其Count财产引发事件(你现在没有理由关心它,但我们可能会并把它扔到那里以获得它的价值).
所以:你ObservableCollection的Employee不会引发任何事件时,其containees的一个有一个属性的变化,无论是否containee器具INotifyPropertyChanged.容器应该实现INotifyPropertyChanged自己,并在其自身的属性值发生变化时引发事件 - 但ObservableCollection包含它的内容不会监听这些事件.我们绝对不需要绝对通知所有人.
但你确实需要知道何时activeDuty发生变化.简单.
创建新Employee实例时,您可以使用处理程序处理它们的PropertyChanged事件OnItemPropertyChanged:
// Fred's not what you'd call active.
var fred = new Employee { Name = "Fred", activeDuty = false };
fred.PropertyChanged += OnItemPropertyChanged;
models.Add(fred);
Run Code Online (Sandbox Code Playgroud)
如果正确Employee实施INotifyPropertyChanged,Fred的活动水平的任何可检测的增加将立即被感知到OnItemPropertyChanged.该object sender参数将是弗雷德和e.PropertyName将是字符串"activeDuty".
public class Employee : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private bool _activeDuty = false;
public bool activeDuty {
get { return _activeDuty; }
set {
_activeDuty = value;
PropertyChanged?.Invoke(this,
new PropertyChangedEventArgs(nameof(activeDuty)));
}
}
// Name implemented similarly -- either that, or give it a protected
// setter and initialize it in the constructor, to prevent accidents.
}
Run Code Online (Sandbox Code Playgroud)
models.CollectionChanged除非随机的其他视图模型可以添加到它,否则我认为您不需要处理.如果他们可以,那么这是一个非常方便的地方把PropertyChanged处理程序放在新Employee的.
| 归档时间: |
|
| 查看次数: |
1281 次 |
| 最近记录: |