Генерация события, когда переменная изменяется для отправки из класса кода в класс c # - PullRequest
2 голосов
/ 03 апреля 2012

Вопрос новичка.

У меня есть два класса c # - класс кода (скажем, CodeClass) и класс формы (скажем, FormClass).В CodeClass у меня есть ряд функций, которые я буду использовать для периодического обновления строки в классе (я могу использовать свойство или все, что подходит).Мне нужен какой-то способ уведомления других классов об изменении этого строкового значения.то есть я постараюсь, чтобы FormClass подписывался на изменение событий в строковом сообщении, а затем выводил значение в текстовое поле или тому подобное.Тем не менее, в какой-то момент в будущем мне нужно будет предоставлять функции API из CodeClass - поэтому в основном мне нужен способ уведомлять любой подписывающийся класс об изменениях в строковом сообщении (строковое сообщение не модифицируется где-либо за пределамиCodeClass - это происходит внутри функций в CodeClass).Я пытался с событиями и делегатами и т. Д., Но все они, кажется, реализованы внешним классом, изменяющим строковое сообщение (свойство).

С уважением и т. Д.

Ответы [ 2 ]

5 голосов
/ 03 апреля 2012

Вам необходимо реализовать интерфейс INotifyPropertyChanged:

class CodeClass : INotifyPropertyChanged
{

    private string _myProperty;
    public string MyProperty
    {
        get { return _myProperty; }
        set
        {
            _myProperty = value;
            OnPropertyChanged("MyProperty");
        }
    }

    #region INotifyPropertyChanged implementation

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged(string propertyName)
    {
        var handler = PropertyChanged;
        if (handler != null)
        handler(this, new PropertyChangedEventArgs(propertyName));
    }

    #endregion

}

В FormClass вы можете подписаться на событие PropertyChanged следующим образом:

codeClass.PropertyChanged += codeClass_PropertyChanged;

...

void codeClass_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
    if (e.PropertyName = "MyProperty")
    {
        ...
    }
}
0 голосов
/ 03 апреля 2012

Просто создайте событие и запустите его, когда строка изменится.

public class CodeClass
{
    private string _someString;
    public string SomeString 
    {
        get { return _someString; }
        set 
        {
            _someString = value;
            if (SomeStringChanged != null) { SomeStringChanged(value) }
        }
    }
    public event Action<string> SomeStringChanged;
}

Примечание. Существует стандартный способ сделать это, интерфейс INotifyPropertyChanged, как и другой используемый ответ.Это используется в основном в WPF и Silverlight, но нет никаких причин, по которым вы не могли бы использовать его в Windows Forms.

...