Триггерное событие при изменении статической переменной int? - PullRequest
3 голосов
/ 23 января 2012

Я сейчас пишу сайт в Silverlight 5.У меня есть открытый статический класс, и в этом классе у меня есть публичный статический int.В классе MainPage (который является публичным частичным классом) я хочу захватить событие, когда публичный статический int изменяется.Есть ли способ, которым я мог бы создать событие, чтобы сделать это для меня, или есть другой способ, которым я мог бы получить такое же поведение?(Или то, что я пытаюсь сделать, даже возможно?)

1 Ответ

5 голосов
/ 23 января 2012

Чтобы уточнить, что сказал Ганс, вы можете использовать свойства вместо полей

Поля:

public static class Foo {
    public static int Bar = 5;
}

Свойства:

public static class Foo {
    private static int bar = 5;
    public static int Bar {
        get {
            return bar;
        }
        set {
            bar = value;
            //callback here
        }
    }
}

Используйте свойства так же, как обычные поля. При их кодировании ключевое слово value автоматически передается в средство доступа set и является значением, в которое устанавливается переменная. Например,

Foo.Bar = 100

Прошло бы 100, поэтому value будет 100.

Сами по себе свойства не сохраняют значения, если они не реализованы автоматически, и в этом случае вы не сможете определить тело для методов доступа (получить и установить). Вот почему мы используем приватную переменную bar для хранения фактического целочисленного значения.

edit : На самом деле у msdn гораздо более хороший пример:

using System.ComponentModel;

namespace SDKSample
{
  // This class implements INotifyPropertyChanged
  // to support one-way and two-way bindings
  // (such that the UI element updates when the source
  // has been changed dynamically)
  public class Person : INotifyPropertyChanged
  {
      private string name;
      // Declare the event
      public event PropertyChangedEventHandler PropertyChanged;

      public Person()
      {
      }

      public Person(string value)
      {
          this.name = value;
      }

      public string PersonName
      {
          get { return name; }
          set
          {
              name = value;
              // Call OnPropertyChanged whenever the property is updated
              OnPropertyChanged("PersonName");
          }
      }

      // Create the OnPropertyChanged method to raise the event
      protected void OnPropertyChanged(string name)
      {
          PropertyChangedEventHandler handler = PropertyChanged;
          if (handler != null)
          {
              handler(this, new PropertyChangedEventArgs(name));
          }
      }
  }
}

http://msdn.microsoft.com/en-us/library/ms743695.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...