当前上下文中不存在OnPropertyChange
本文关键字:不存在 OnPropertyChange 上下文 | 更新日期: 2023-09-27 18:25:01
似乎看不出哪里出了问题?OnPropertyChange没有被重新定义,有什么建议吗?
public class MedicationList : INotifyPropertyChanged
{
public int MedicationID { get; set; }
public string Description
{
get
{
return Description;
}
set
{
OnPropertyChanged( "Description" );
Description = value;
}
}
}
}
编辑我添加了public class MedicationList : INotifyPropertyChanged
您应该实现INotifyPropertyChanged接口,该接口声明了单个PropertyChanged
事件。如果对象的某些属性发生了更改,则应该引发此事件。正确实施:
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));
}
}
我打赌你想做这样的事情:
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;
}
您需要接口在类中实现的实际代码。
/// <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));
}
}
此方法需要由您的类型定义,以引发INotifyPropertyChanged::PropertyChanged
事件
public PropertyChangedEventHandler PropertyChanged;
...
private void OnPropertyChanged(string propertyName) {
var saved = PropertyChanged;
if (saved != null) {
var e = new PropertyChangedEventArgs(propertyName);
saved(this, e);
}
}
基类和接口之间有区别。
对于基类,成员是自动继承的,不需要执行任何操作(除非某些成员需要override
)。对于接口,类不会自动继承接口成员;你必须在课堂上介绍他们。如果你不这样做,编译器就会抱怨。
INotifyPropertyChanged
是一个接口。
您需要固有的BaseViewModel。
public class MedicationList : BaseViewModel