Добавить событие в контроллер wpf при изменении значения свойства - PullRequest
3 голосов
/ 15 декабря 2011

У меня есть собственность

public sealed partial class Computer
{
    private bool _online;
    public bool Online
    {
        get { return _online; }
        set
        {
            _online = value;
            RaiseProperty("Online");
        }
    }
 }

, который вызывает событие типа INotifyPropertyChanged

public sealed partial class Computer : INotifyPropertyChanged
{
  public event PropertyChangedEventHandler PropertyChanged;

    private void RaiseProperty(string propertyName)
    {
        if (this.PropertyChanged != null)
        {
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
 }

У меня вопрос, как я могу добавить дополнительное событие, сообщающее в этом случае TabControl для запуска определенного метода при каждом изменении свойства онлайн?

Ответы [ 2 ]

3 голосов
/ 15 декабря 2011

Вам необходимо зарегистрировать метод для события PropertyChanged

MyComputer.PropertyChanged += Computer_PropertyChanged;

void Computer_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
    if (e.PropertyName == "Online")
    {
        // Do Work
    }
}
0 голосов
/ 15 декабря 2011
public sealed partial class Computer
{
    // This event is fired every time when Online is changed
    public event EventHandler OnlineChanged;

    private bool _online;
    public bool Online
    {
        get { return _online; }
        set
        {
            // Exit if online value isn't changed
            if (_online == value) return;

            _online = value;
            RaiseProperty("Online");

            // Raise additional event only if there are any subscribers
            if (OnlineChanged != null)
                OnlineChanged(this, null);
        }
    }
}

Вы можете использовать это событие как:

Computer MyComputer = new MyComputer();
MyComputer.OnlineChanged += MyComputer_OnlineChanged;

void MyComputer_OnlineChanged(object sender, EventArgs e)
{
    Computer c = (Computer)c;
    MessageBox.Show("New value is " + c.Online.ToString());
}
...