structs and INotifyPropertyChanged

本文关键字:INotifyPropertyChanged and structs | 更新日期: 2023-09-27 18:17:20

我试图添加属性到我的模型玩我的第一个MVVM应用程序。现在我想添加一个位置来以一种干净的方式保存特定的数据,所以我使用了struct。但我有问题通知属性更改,它没有访问方法(非静态字段需要对象引用)有人能给我解释一下为什么会发生这种情况,并告诉我一个适合我需要的策略吗?

谢谢!

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;

structs and INotifyPropertyChanged

OnPropertyChanged需要在您希望更新其属性的作用域中定义。

要做到这一点,你必须实现接口INotifyPropertyChanged

最后,您必须为OnPropertyChanged方法提供正确的参数。在这个例子中"Stopped"

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;
}

编辑:在你的评论中,你提到你有一个类环绕你在例子中提供的代码。

这意味着你在类中嵌套了一个结构体。仅仅因为您嵌套了您的结构,并不意味着它从外部类继承属性和方法。您仍然需要在您的结构中实现INotifyPropertyChanged,并在其中定义OnPropertyChanged方法。