【问题标题】:How to update Dependent Property when a property value changes?属性值更改时如何更新从属属性?
【发布时间】:2011-08-31 18:05:24
【问题描述】:

我的类有两个属性

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 值的逻辑,以防它打扰您:)

【问题讨论】:

    标签: c# asp.net inotifypropertychanged


    【解决方案1】:

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

    但是,如果您有多个类和实例需要观察彼此的属性变化,这可能是一种更合适的方式。

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

    【讨论】:

    • 我想你的意思是,“我不会建议引进..”?
    • 啊,确实。我的大脑使用了适合另一种情况的 mind,即“不介意”。感谢您指出这一点,这意味着负面的事情:)
    • 我只需要它一次。谢谢!
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-03-16
      • 2020-02-21
      • 2014-04-06
      • 1970-01-01
      • 2015-12-15
      • 1970-01-01
      • 2021-11-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多