2012-01-22 17 views
2

私は現在Silverlight 5でWebサイトを作成しています。私はパブリック静的クラスを設定して、そのクラスで私はパブリックstatic intが定義されています。 MainPageクラス(パブリック部分クラス)では、public static intが変更されたときにイベントをキャプチャします。私のためにこれを行うためのイベントを設定する方法はありますか?同じ行動を取ることができる別の方法がありますか? (それとも私も可能やろうとしています何ですか?)static int変数が変更されたときにイベントをトリガしますか?

+2

ではなく、公共の静的プロパティを確認します。今は簡単です。 –

+0

静的イベントを使用しているときのメモリリークに注意してください(デフォルトの実装を使用している場合、リスナーオブジェクトは、デタッチしない限りガベージコレクションされません)。 – Nuffin

答えて

4

ハンスが言ったことについて詳しく説明するには、代わりにフィールド

フィールドのプロパティを使用することができます。

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キーワードが自動的にセットアクセッサに渡され、変数が設定されている値になります。例えば、

Foo.Bar = 100

100を通過するので、value100だろう。

プロパティは、自動的に実装されない限り値を格納しません。この場合、アクセサ(getおよびset)のボディを定義することはできません。このため、プライベート変数barを使用して実際の整数値を格納するのはこのためです。

編集:実際には、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

+0

ありがとう!これを機能させるために、私はちょうどセットアップしました:Foo.PropertyChanged + =新しいPropertyChangedEventHandler(Foo_PropertyChanged); MainPageクラスではすべてがうまくいった。私はOnPropertyChangedをpublic static voidに変更する必要がありました。 –

関連する問題