繁体   English   中英

从另一个班级触发事件

[英]Trigger an event from within another class

在.NET中,我有一个名为Caption的类。 我还有另一门课,叫做“量规”。 在Gauge类中,我有一个定义为Caption的属性。

我试图弄清楚如何执行以下操作:当Caption类中的某个属性发生更改时,如何获取它以执行Gauge类中的子例程? 我在想我必须声明一个事件并使用AddHandlers来触发它,但是我无法考虑如何完成此操作。

public class Caption
{
    private int myInt;

    public event EventHandler MyIntChanged;


    private void OnMyIntChanged()
    {
        var handler = this.MyIntChanged;
        if (handler != null)
        {
            handler(this, EventArgs.Empty);
        }
    }
    public int MyInt
    {
        get
        {
            return this.myInt;
        }
        set
        {

            if (this.myInt != value)
            {
                this.myInt = value;
                this.OnMyIntChanged();
            }
        }
    }
}

所以现在,在您的guage类中:

public class Guage
{
    private Caption caption;

    public Caption Caption 
    {
        get
        {
            return this.caption;
        }
        set
        {
            if (this.caption!= value)
            {
                this.caption= value;
                this.caption.MyIntChanged += new EventHandler(caption_MyIntChanged);
            }
        }
    }

    private void caption_MyIntChanged(object sender, EventArgs e)
    {
       //do what you gotta do
    }
}

您将要考虑实现INotifyPropertyChanged接口,该接口正是为此目的而设计的-当类实例的属性更改时引发一个事件。

这个MSDN页面给出了一个用法的很好的例子。

// This class implements a simple customer type 
// that implements the IPropertyChange interface.
public class DemoCustomer : INotifyPropertyChanged
{
    // These fields hold the values for the public properties.
    private Guid idValue = Guid.NewGuid();
    private string customerName = String.Empty;
    private string companyNameValue = String.Empty;
    private string phoneNumberValue = String.Empty;

    public event PropertyChangedEventHandler PropertyChanged;

    private void NotifyPropertyChanged(String info)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(info));
        }
    }

    // The constructor is private to enforce the factory pattern.
    private DemoCustomer()
    {
        customerName = "no data";
        companyNameValue = "no data";
        phoneNumberValue = "no data";
    }

    // This is the public factory method.
    public static DemoCustomer CreateNewCustomer()
    {
        return new DemoCustomer();
    }

    // This property represents an ID, suitable
    // for use as a primary key in a database.
    public Guid ID
    {
        get
        {
            return this.idValue;
        }
    }

    public string CompanyName
    {
        get {return this.companyNameValue;}

        set
        {
            if (value != this.companyNameValue)
            {
                this.companyNameValue = value;
                NotifyPropertyChanged("CompanyName");
            }
        }
    }
    public string PhoneNumber
    {
        get { return this.phoneNumberValue; }

        set 
        {
            if (value != this.phoneNumberValue)
            {
                this.phoneNumberValue = value;
                NotifyPropertyChanged("PhoneNumber");
            }
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM