Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

OnPropertyChange does not exist in the current context?

Tags:

c#

wpf

Cant seem to see where I am going wrong? the OnPropertyChange is not being recondnised any suggestions?

  public class MedicationList : INotifyPropertyChanged 
{



    public int MedicationID { get; set; }

    public string Description
    {
        get
        {
            return Description;
        }
        set
        { 
            OnPropertyChanged( "Description" );
            Description = value;

        }
    }
}

}

EDIT I have added public class MedicationList : INotifyPropertyChanged

like image 857
Mark Avatar asked Jul 26 '13 15:07

Mark


3 Answers

You should implement INotifyPropertyChanged interface, which has single PropertyChanged event declared. You should raise this event if some of object's properties changed. Correct implementation:

public class MedicationList : INotifyPropertyChanged
{
    private string _description; // storage for property value

    public event PropertyChangedEventHandler PropertyChanged;

    public string Description
    {
        get { return _description; }
        set
        {
            if (_description == value) // check if value changed
                return; // do nothing if value same

            _description = value; // change value
            OnPropertyChanged("Description"); // pass changed property name
        }
    }

    // this method raises PropertyChanged event
    protected void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null) // if there is any subscribers 
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
}
like image 93
Sergey Berezovskiy Avatar answered Sep 28 '22 19:09

Sergey Berezovskiy


I bet you want to do something like this:

public class MedicationList : INotifyPropertyChanged {
  public int MedicationID { get; set; }
  private string m_Description;

  public string Description {
    get { return m_Description; }
    set {
      m_Description = value;
      OnPropertyChanged("Description");
    }
  }

  private void OnPropertyChanged(string propertyName) {
    if (string.IsNullOrEmpty(propertyName))
      throw new ArgumentNullException("propertyName");

    var changed = PropertyChanged;
    if (changed != null) {
      changed(this, new PropertyChangedEventArgs(propertyName));
    }
  }

  public event PropertyChangedEventHandler PropertyChanged;
}
like image 23
Ondrej Svejdar Avatar answered Sep 28 '22 19:09

Ondrej Svejdar


You need the actual code the interface implements inside of your class.

/// <summary>
/// Public event for notifying the view when a property changes.
/// </summary>
public event PropertyChangedEventHandler PropertyChanged;

/// <summary>
/// Raises the PropertyChanged event for the supplied property.
/// </summary>
/// <param name="name">The property name.</param>
internal void OnPropertyChanged(string name)
{
    PropertyChangedEventHandler handler = PropertyChanged;
    if (handler != null)
    {
        handler(this, new PropertyChangedEventArgs(name));
    }
}
like image 36
JeremiahDotNet Avatar answered Sep 28 '22 17:09

JeremiahDotNet