我对PostSharp NotifyPropertyChanged方面有问题。我将实现模型体系结构作为复合模式。我的问题是,PropertyChanged不是为TaskGroup.PercentDone而提出的。
任务属性是ITask的列表,因此可以有TaskGroup或SimpleTask。SimpleTask具有自动属性PercentDone和正确触发PropertyChanged事件。
对于TaskGroup.PercentDone,我必须使用SafeForDependencyAnalysis,如果不使用,则会得到编译错误。但是我不知道如何使用Depends.On()
我尝试了很多这样的解决方案。
Depends.On(this.Tasks.Sum(task => task.PercentDone));
foreach (var task in this.Tasks)
{
Depends.On(task.PercentDone);
}
Depends.On(this.Tasks); 但我想不出来。
class TaskGroup : TaskBase, IComposite<ITaskModel>
{
[SafeForDependencyAnalysis]
public override int PercentDone
{
get
{
//BUG event ProperityChanges is not raised
int percentDone = this.Tasks.Sum(task => task.PercentDone);
return percentDone / this.tasks.Count;
}
set
{
foreach (var task in this.tasks)
{
task.PercentDone = value;
}
}
}
...
}我使用最后一个版本的PostSharp 4.0.36.0。
我没能在google上找到类似的问题,但这是一件很常见的事情,我谷歌错了吗?你可以把我引向正确的方向。我非常感谢你的帮助。
发布于 2014-11-27 16:01:34
目前,NotifyPropertyChangedAspect只支持Depends.On中的属性链,即origin.Property1.Property2和文档中所述的类似属性链。前两个表达式将被忽略,因为表达式需要以字段或this开头,并且只包含一个接一个链接的属性。
一般来说,所有的“向量”操作都是不可能的。因此,您需要手动实现这种行为。例如,您可能希望注册到集合的INotifyCollectionChanged
的确,PostSharp至少应该产生一条错误消息,目前它只是忽略了Depends.On。这将是一个非常好的特性,我们将来可能会考虑它(考虑在我们的UserVoice页面上投票支持它)。
https://stackoverflow.com/questions/27040908
复制相似问题