我遇到PostSharp NotifyPropertyChanged方面的问题。我将实现模型架构作为复合模式。我的问题是没有为TaskGroup.PercentDone引发PropertyChanged。
Tasks属性是ITask的List,因此可以有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的最新版本。
我在谷歌上找不到类似的问题,但这是很常见的事情,我谷歌搜索错了?你可以指引我朝着正确的方向前进。我非常感谢你的帮助。
答案 0 :(得分:1)
目前,NotifyPropertyChangedAspect
仅支持Depends.On
中的属性链,即origin.Property1.Property2
,类似于文档中所述。前两个表达式将被忽略,因为表达式需要以字段或this
开头,并且除了一个接一个地链接的属性访问之外什么都不包含。
通常所有“矢量”操作都是不可能的。因此,您需要手动实现此类行为。例如,您可能想要注册到集合的INotifyCollectionChanged
PostSharp确实应该至少产生一条错误消息,目前它只是忽略了Depends.On
。这将是一个非常好的功能,我们可能会在未来考虑它(考虑在our UserVoice Page上投票。)