作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个实现 INotifyPropertyChanged
的类“BaseClass”并具有以下内容:
基类:
private bool isOn;
public bool IsOn
{
get { return isOn; }
set
{
isOn = value;
RaisePropertyChanged("BaseClass:IsOn");
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChanged(string name)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}
然后我有一个类,“DIClass”,它也实现了
INotifyPropertyChanged
.它还有一个
ObservableCollection<BaseClass>
:
public ObservableCollection<BaseClass> ClassesOfA;
private string iNPCTest;
public string INPCTest
{
get { return iNPCTest; }
set
{
iNPCTest = value;
RaisePropertyChanged("DIClass: INPCTest");
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChanged(string name)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}
我的 ViewModel 拥有一个“DIClass”的实例并注册到它的
PropertyChanged
事件。当我设置
INPCTest
的值时在“DIClass”中,ViewModel 正确地“捕获”了事件。但是,当我更新
IsOn
ObservableCollection
内的属性(property),如下所示,ViewModel 中没有拾取事件。
ClassesOfA[0].IsOn = true;
为什么 INPC 接口(interface)不适用于嵌套属性?问答
here似乎很相关,但我无法弄清楚。
PropetyChanged
ObservableCollection
的事件的项目,例如:
ClassesOfA[0].PropertyChanged += DIClass_PropertyChanged;
ClassesOfA[1].PropertyChanged += DIClass_PropertyChanged;
但是,这仍然没有冒泡通知我的
ViewModel
,这是我的
DIClass
的属性(property)的
ObservableCollection<BaseClass>
已经改变。我想使用 INPC 通过 MVVM 层向上冒泡事件信息/属性更新。但我想“包装”它们以使我的类(class)更干净/更少的属性
最佳答案
回答您的问题:这是设计使然。
ObservableCollection 有两个事件:
collection.Add( item )
collection = new ObservablecCollection<T>();
public List<BaseClass> Collection {get;set;}
public void InitializeCollection( IEnumerable<BaseClass> baseClassCollection){
Collection = new List<BaseClass>();
foreach(var item in baseClassCollection){
item.PropertyChanged += MethodToCallOnPropertyChanges;
Collection.Add( item );
}
}
public void MethodToCallOnPropertyChanges(object sender, PropertyChangedEventArgs e){
//react to any property changes
doSomething();
//react to specific properties
if(e != null && e.PropertyName.Equals("isOn"))
doSomethingOtherStuff();
}
这可能非常烦人,并可能导致其他一些问题。
关于c# - INotifyPropertyChanged 不适用于 ObservableCollection<Class> 中的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66153327/
我是一名优秀的程序员,十分优秀!