如何在属性值更改时更新从属属性?

时间:2011-08-31 18:05:24

标签: c# asp.net inotifypropertychanged

我的课程有两个属性

public List<ChildMember> ChildMember
        {
            get
            {
                if (_ChildMember == null)
                {
                    _ChildMember = this.UserRole == EUserRole.SalesExecutive ? this.GetMembers(this.LogonName, this.FilterByMID) : this.GetChildMembers();
                }
                return _ChildMember;
            }
            set
            {
                _ChildMember = value;
            }
        }
        public int FilterByMID{ get; set; }

基本上我需要做的是每次更改FilterByMID值时刷新ChildMember列表。我知道我可以在更新FilterByMID的值之前设置this.ChildMember = null,但我想知道这是否是一个使用 INotifyPropertyChanged 或者更好的方法的好地方?任何帮助将不胜感激。

P.S。:GetMembers()方法具有检查0和-ve值的逻辑,以防它困扰你:)

PS:这个类存在于一个类库中,但是由ASP.NET WebApplication而不是WCF / WPF使用...当我搜索INotifyPropertyChanged时,我注意到很多WCF / WPF的帖子,所以只是想澄清一下。 / p>

2 个答案:

答案 0 :(得分:2)

如果您只是在本课程中执行此操作一次,我不介意引入INotifyPropertyChanged,因为您必须在FilterByMID的setter中发出通知,然后连接事件处理程序你将更新其他财产。

但是,如果您有多个类和实例需要相互观察属性的变化,那么它可能是更合适的方式。

在这方面还有一些有趣的框架。一些例子是Reactive Extensions,Rx.NET和(基于前者)Reactive UI,它有一个不仅适合用户界面编程的组件。

答案 1 :(得分:1)

您应该清除FilterByMyID setter中的字段。

INotifyPropertyChanged允许您通知其他人某个属性已更改 在您的课程中直接使用它只会使您的代码更复杂。