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.
在使用 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 causeObservableCollection
has many internal implementations which probably is of no use to you any actually consuming memory & perforamnce.