В примерах для кодирования с использованием шаблона MVVM и привязки WPF они используют INotifyPropertyChanged
, когда это одно значение, и ObservableCollection
, когда это список значений.INotifyPropertyChanged vs 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}">
«Это уместно?» Если он работает, то он работает. Пока вы не сталкиваетесь с какой-либо проблемой производительности, я думаю, что все в порядке. Потому что, как вы сказали, вы не можете использовать статическое свойство с INotifyPropertyChanged. Я не знаю никакой пользы от использования INPC над ObservableCollection, потому что они обычно используются по-разному, но в этом случае вы не можете использовать INPC для своего статического свойства. – Zack
Вас также может заинтересовать принятый ответ на этот вопрос http://stackoverflow.com/questions/14614190/inotifypropertychanged-and-static-properties – Zack
Вы можете теоретически изменять уведомления со статическим свойством ('public static event EventHandler StaticPropertyChanged', blah blah), но ... Я пробовал, он не работал, и ваш хак выглядит намного меньше проблем и на самом деле работает. Благодаря! –