首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获得CSLA3.02 BusinessListBase ListChanged事件来标识子对象,该对象的OnPropertyChanged触发了该事件?

如何获得CSLA3.02 BusinessListBase ListChanged事件来标识子对象,该对象的OnPropertyChanged触发了该事件?
EN

Stack Overflow用户
提问于 2013-12-05 05:33:02
回答 1查看 595关注 0票数 1

我有一个使用CSLA 3.0.2的项目。

我有一个具有IsDefault属性的子项的BusinessListBase集合对象。

当子对象的IsDefault属性设置为true时,我希望将其他子成员的IsDefault属性设置为false。

我在子setter中调用了OnPropertyChanged("IsDefault"),并引发了集合ListChanged事件。但是,事件的发送方是Collection对象,而不是引发事件的子对象。ListChangedEventArgs (e)中的子项也不是。

如何获取对引发事件的特定子实例的引用?

或者我应该用另一种方式做这件事?比如在子setter中获取对父元素的引用并在那里执行?

任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2013-12-06 20:09:10

我从3.6开始使用CSLA,但我认为这在CSLA 3中也适用:

您会发现在BusinessListBase集合类中有一个可以覆盖的OnChildChanged方法。该方法有一个参数Csla.Core.ChildChangedEventArgs,其中包含对已更改的子对象的引用,以及已更改的对象的哪个属性。

然后,您可以在该方法中循环集合中的其他子项,将它们设置为IsDefault = false。

代码语言:javascript
复制
protected override void OnChildChanged(Csla.Core.ChildChangedEventArgs e)
{
    base.OnChildChanged(e);

    switch (e.PropertyChangedArgs.PropertyName)
    {
        case "IsDefault":

            if ( ((ChildObjectType)e.ChildObject).IsDefault == true )
            {
                // then loop all the other childern 
                foreach (ChildObjectType child in this)
                {
                    if (child != e.ChildObject && child.IsDefault == true)
                    {
                        child.IsDefault = false; 
                    }
                }
            }
            break;
    }

}

如果这不起作用,那么另一种方法是使用子对象中的Parent属性来获取对集合的引用,然后调用您在BLB集合中编写的更新其他子对象的方法。根据您的类的设置方式,您可能需要查看父级的父级。

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

https://stackoverflow.com/questions/20386442

复制
相关文章

相似问题

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