我尝试使用我的第一个MVVM应用程序向我的模型添加属性。 现在我想添加一个以干净的方式保存特定数据的地方,所以我使用了一个结构。 但我有问题通知属性已更改,它无权访问该方法(非静态字段需要对象引用) 有人可以向我解释为什么会发生这种情况,并告诉我一个符合我需求的策略吗?
谢谢!
public ObservableCollection<UserControl> TimerBars
{
get { return _TimerBars; }
set
{
_TimerBars = value;
OnPropertyChanged("TimerBars");
}
}
public struct FBarWidth
{
private int _Stopped;
public int Stopped
{
get { return _Stopped; }
set
{
_Stopped = value;
OnPropertyChanged("Name"); //ERROR: An object reference is required for the non-static field
}
}
private int _Running;
//And more variables
}
private void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
public event PropertyChangedEventHandler PropertyChanged;
答案 0 :(得分:1)
OnPropertyChanged
需要在您希望更新属性的范围内定义。
为此,您必须实施界面INotifyPropertyChanged
。
最后,您必须为OnPropertyChanged
方法提供正确的参数。在此示例中&#34;已停止&#34;
public struct FBarWidth : INotifyPropertyChanged
{
private int _Stopped;
public int Stopped
{
get { return _Stopped; }
set
{
_Stopped = value;
OnPropertyChanged("Stopped");
}
}
private int _Running;
//And more variables
private void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
编辑:在您的评论中,您提到您已经有一个类,它会使您在示例中提供的代码无法实现。
这意味着您已经在类中嵌套了一个struct。
仅仅因为你嵌套了你的结构,并不意味着它从外部类继承了属性和方法。您仍然需要在结构中实现INotifyPropertyChanged
并在其中定义OnPropertyChanged
方法。