У меня есть ViewModel, реализующий INotifyPropertyChanged. В этой ViewModel у меня есть простое строковое свойство (TextBoxContent), которое вызывает OnPropertyChanged() при изменении значения.
Код: Выделить всё
public class SimpleVM : INotifyPropertyChanged
{
public event PropertyChangedEventHandler? PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string? name = null)
{
if (name is not null)
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
private string _textBoxContent = "Hello from SimpleVM";
public string TextBoxContent
{
get => _textBoxContent;
set
{
if (_textBoxContent != value)
{
_textBoxContent = value;
OnPropertyChanged();
}
}
}
}
Код: Выделить всё
Код: Выделить всё
RootGrid.DataContext = vm;
Однако, если я затем упаковываю приложение в пакет приложений и устанавливаю его на свой компьютер, я могу определить, что возникает исключение, когда ViewModel назначается RootGrid.DataContext (эта ошибка - ссылка на объект не установлена...). Если я затем удалю реализацию :INotifyPropertyChanged из ViewModel, исключение не возникнет, когда я назначу экземпляр ViewModel RootGrid.DataContext, но тогда значение TextBoxContent в виртуальной машине никогда не будет привязано к TextBox в xaml.
Я знаю, что могу сделать все это с помощью x:Bind и вообще обойти использование DataContext. Однако как я могу получить ViewModel:INotifyPropertyChanged для назначения DataContext, не вызывая исключения? Или в WinUI это вообще не было целью привязки?
Подробнее здесь: https://stackoverflow.com/questions/797 ... causes-exc
Мобильная версия