【问题标题】:Detecting value changes without using INotifyPropertyChanged在不使用 INotifyPropertyChanged 的​​情况下检测值更改
【发布时间】:2018-12-17 06:38:46
【问题描述】:

有没有办法在不使用 INotifyPropertyChanged 的​​情况下检测字段或属性的变化?

例如,我的意思是连接到某个字段并检测其值已更改,即使它是一个 int 字段。

【问题讨论】:

  • 如果您无法控制字段/属性的设置方式,轮询是您唯一的选择。
  • 当然,我不想检查特定时间的变化,而是要让检测“自动”。
  • 轮询意味着您重复检查该值(例如使用计时器),而不是在特定时间。

标签: c# inotifypropertychanged


【解决方案1】:

除了你自己写的整数之外,你在写整数时不能使用任何效果。没有办法绕过INotifyPropertyChanged

您可以使用引发事件的属性来包装该字段。 您可以拥有一个管理器类,该类公开一个属性并通过它管理该字段,即使该字段不属于该类也是如此。 您可以使用线程轮询该值,如果它发生更改,则引发事件。

在大多数情况下,明智的做法是尽可能地遵循 mvvm 蓝图,这样就不会有人太惊讶了。

【讨论】:

    【解决方案2】:

    您可以决定在属性更改时引发自定义事件。您的上层唯一需要做的就是订阅SomeProperty 事件。您可以将 EventHandler 代表替换为适合您需要的内容。

     public event EventHandler SomePropertychanged;
    
        private int _SomeProperty;
        public int SomeProperty
        {
            get
            {
                return this._SomeProperty;
            }
            set
            {
                if (this._SomeProperty != value)
                    SomePropertychanged?.Invoke(this, new EventArgs());
            }
        }
    

    【讨论】:

    • 这与实现 INotifyPropertyChanged 有何不同(除了不同的事件名称)?
    • 它与 INotifyPropertyChanged 相比有何变化?操作方案相同。
    • 我希望它能够以某种方式在反射或类似的级别上被检测到。
    • @g_m 您应该更新您的问题,以便它反映您的希望。就目前而言,我认为您只是出于某种原因想避免 INotifyPropertyChanged,所以这似乎是一个很好且简单的解决方案。
    • 美观简单的解决方案
    猜你喜欢
    • 2015-04-11
    • 2017-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 2019-05-23
    • 1970-01-01
    • 2016-07-09
    相关资源
    最近更新 更多