首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PostSharp NotifyPropertyChanged设置Depends.On

PostSharp NotifyPropertyChanged设置Depends.On
EN

Stack Overflow用户
提问于 2014-11-20 13:32:34
回答 1查看 249关注 0票数 0

我对PostSharp NotifyPropertyChanged方面有问题。我将实现模型体系结构作为复合模式。我的问题是,PropertyChanged不是为TaskGroup.PercentDone而提出的。

任务属性是ITask的列表,因此可以有TaskGroup或SimpleTask。SimpleTask具有自动属性PercentDone和正确触发PropertyChanged事件。

对于TaskGroup.PercentDone,我必须使用SafeForDependencyAnalysis,如果不使用,则会得到编译错误。但是我不知道如何使用Depends.On()

我尝试了很多这样的解决方案。

代码语言:javascript
复制
Depends.On(this.Tasks.Sum(task => task.PercentDone)); 

foreach (var task in this.Tasks)
{
    Depends.On(task.PercentDone);
}

Depends.On(this.Tasks); 

但我想不出来。

代码语言:javascript
复制
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上找到类似的问题,但这是一件很常见的事情,我谷歌错了吗?你可以把我引向正确的方向。我非常感谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-27 16:01:34

目前,NotifyPropertyChangedAspect只支持Depends.On中的属性链,即origin.Property1.Property2和文档中所述的类似属性链。前两个表达式将被忽略,因为表达式需要以字段或this开头,并且只包含一个接一个链接的属性。

一般来说,所有的“向量”操作都是不可能的。因此,您需要手动实现这种行为。例如,您可能希望注册到集合的INotifyCollectionChanged

的确,PostSharp至少应该产生一条错误消息,目前它只是忽略了Depends.On。这将是一个非常好的特性,我们将来可能会考虑它(考虑在我们的UserVoice页面上投票支持它)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27040908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档