【问题标题】:how to implement on change notification on a object如何在对象上实现更改通知
【发布时间】:2010-12-25 13:03:24
【问题描述】:

我有一个普通的普通班,例如:

public class ObjectA
{
    public string val {get;set;}
    ...
}

在另一个类中,它拥有一个 ObjectA 的实例,例如:

public class ObjectB
{
     private ObjectA objectA;
     ....
}

实例“objectA”将经常更改。 我的意思是在 ObjectB 中,一些方法将新的和新的对象 A 实例分配给“objectA”

有没有办法实现触发器,每当实例objectA 发生变化时,都会允许我做一些事情,例如:

objectA += OnChanged_ObjectA   

protected void OnOnChanged_ObjectA()
{
    // do something
}

【问题讨论】:

  • 如果objectA 字段仅由ObjectB 内部方法更改,那么您应该已经知道何时更改它(假设ObjectB 的代码是您编写的)。您能否详细说明您正在尝试做的事情?
  • 你应该实现观察者模式。在 C# 中,使用事件和委托。 dofactory.com/Patterns/PatternObserver.aspx

标签: c# event-handling onchange


【解决方案1】:

您可以在ObjectA 上创建一个更改event,您将针对您希望跟踪的任何更改触发该更改。这将允许您在任何其他对象上订阅此事件,包括 ObjectB

Object1.cs:

// Delegate type for the event handler
public delegate void MyEventHandler();

// Declare the event.
public event MyEventHandler MyEvent;

// In the properties or any place you what to notify of change:
if (MyEvent != null)
      MyEvent();

您可以在Object2.cs 订阅:

objectA.MyEvent += OnChanged_ObjectA


protected void OnOnChanged_ObjectA()
{
    // Action changes
}

【讨论】:

  • @Oded 我有一个问题,如果我想在属性更改时通知,我必须引发属性设置器的事件,对吗?例如:十进制金额。你可以给我一个例子吗?我需要这个用于 WPF
  • @Andres - WPF 有自己非常不同的通知机制。不是可以在评论中轻松涵盖的内容。
  • @Oded 但我不能对事件做同样的事情吗?当在其中声明的对象属性发生更改时,我需要调用用户控件中的方法..
【解决方案2】:

【讨论】:

  • 我相信这在对类使用数据绑定时更合适。
【解决方案3】:

我最近遇到了这样的问题,但不幸的是,我没有找到任何其他解决方案,但是这个:

public ObjectB
{
    private ObjectA _objectA;
    public  ObjectA objectA
    {
        get 
        { 
            return _objectA; 
        }
        set
        {
            if (value != _objectA)
            {
                _objectA = value;
                RaiseObjectAChanged(/* sender, args */);
            }
        }
    }
    private RaiseObjectAChanged()
    {
        // raise event here
    }
    private OnObjectAChanged()
    {
        // event handler
    }
}

【讨论】:

  • 这是一种解决方案...但是很多地方都在使用它...如果我进行此更改..我需要考虑很多代码..我可以创建一个偶数吗? ?
猜你喜欢
  • 2015-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 2016-10-22
  • 2013-05-01
  • 2010-12-10
相关资源
最近更新 更多