Khushi
Khushi

Reputation: 1051

Get notified when static property changes in wpf

Here microsoft described that in wpf 4.5 we can use INotifypropertyChanged for static properties as well. So I tried to do that.

Here is the code:

public static event PropertyChangedEventHandler StaticPropertyChanged;
    protected static void OnStaticPropertyChanged(string PropertyName)
    {
        PropertyChangedEventHandler handler = StaticPropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(PropertyName));
        }
    }

But I dont know what to use instead of this keyword in the above code?

Here is my code:

public static event PropertyChangedEventHandler StaticPropertyChanged;
protected static void OnStaticPropertyChanged(string PropertyName)
{
    PropertyChangedEventHandler handler = StaticPropertyChanged;
    if (handler != null)
    {
        handler(typeof(MainWindowViewModel), new PropertyChangedEventArgs(PropertyName));
    }
}

private static Haemogram _cHaemogram;
public static Haemogram cHaemogram
{
    get
    {
        return _cHaemogram;
    }
    set
    {
        _cHaemogram = value;
        OnStaticPropertyChanged("cHaemogram");
    }
}

Upvotes: 1

Views: 2196

Answers (2)

Seçkin
Seçkin

Reputation: 2826

Think that you added this to your viewmodel :

  yourClass.StaticPropertyChanged+= yourClassStaticPropertyChanged;

...

  void yourClassStaticPropertyChanged(object sender, DependencyPropertyChangedEventArgs e)
        {

        }

The "this" keyword refers the "object sender" parameter. If you use "this" in your code while creating handler, it refers "sender" in yourClassStaticPropertyChanged function. If you send null, the sender parameter will be null.

--Edit--

If you want to get changes to the textbox add this code to your viewmodel :

private string _updatedText;
public string UpdatedText
{
  get
  {
      return _updatedText;
  }
  set
  {
      _updatedText= value;
      OnStaticPropertyChanged("UpdatedText")
  }
}

And set UpdatedText in the event :

void yourClassStaticPropertyChanged(object sender, DependencyPropertyChangedEventArgs e)
        {
                UpdatedText=e.NewValue;
        }

then bind the UpdatedText to your textbox like this :

<TextBlock Text="{Binding UpdatedText}"/>

Upvotes: 0

Jon Skeet
Jon Skeet

Reputation: 1500105

Unless anything uses the sender parameter, it won't matter. Logically it would make sense to use the type:

handler(typeof(TypeDeclaringEvent), new PropertyChangedEventArgs(PropertyName));

EDIT: Note that in the document you referred to, it states:

The static event can use either of the following signatures.

   public static event EventHandler MyPropertyChanged;
   public static event EventHandler<PropertyChangedEventArgs> StaticPropertyChanged;

Your event doesn't comply with these, which could be an issue.

Upvotes: 7

Related Questions