INotifyPropertyChanged 与单个值的 ObservableCollection

INotifyPropertyChanged vs ObservableCollection for a single value

在使用 MVVM 模式和 WPF 绑定进行编码的示例中,当它是单个值时使用 INotifyPropertyChanged,当它是值列表时使用 ObservableCollection

我也读过,您不能将静态变量与 INotifyPropertyChanged 一起使用,但可以与 ObservableCollection 一起使用。我想绑定到一个静态变量。

最简单(至少对我而言)的解决方法是使用 ObservableCollection 并始终只使用并绑定到索引 0。这样做合适吗?使用 INotifyPropertyChanged 而不是 ObservableCollection 有什么好处吗?

例如: 这似乎是最简单的解决方法:

public static ObservableCollection<int> MyValues { get; set;  }

<TextBox Text="{Binding MyValue[0]}">

想要这样做:

private static int _myValue;
public static int MyValue //does not work
{ 
    get { return _myValue; }
    set { _myValue = value; OnPropertyChange(); }
}

<TextBox Text="{Binding MyValue, UpdateSourceTrigger=PropertyChanged}">

这个link可能会有帮助,它显示了 List、ObservableCollection 和 INotifyPropertyChanged 之间的区别。

希望对您有所帮助

我认为您的类比不公平(将 ObservableCollection 直接与 Primitive Type 属性 进行比较)。将 ObservableCollection 与下方 class

进行比较
public class MyClass : INotifyPropertyChanged
{

    private string text;

    public string Text
    {
        get { return text; }
        set { text = value;
        RaiseChange("Text");
        }
    }


    public event PropertyChangedEventHandler PropertyChanged;
    private void RaiseChange(string prop)
    {
        if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(prop)); }
    }
}

现在下面两个将表现相同:

 public static MyClass Text { get; set; }

 public static ObservableCollection<string> Text { get; set; }

如果您对 MyClass 执行 Text.Text = "Hello" 或对 ObservableCollection 执行 Text[0] = "Hello",两者将以相同的方式反映。

Now if you have to use a static property for binding then instead of ObservableCollection I'll advice you to write your new class cause ObservableCollection has many internal implementations which probably is of no use to you any actually consuming memory & perforamnce.