Почему в приложении WinUI3 привязка DataContext работает при отладке, но вызывает исключение при развертывании и запускеC#

Место общения программистов C#
Anonymous
Почему в приложении WinUI3 привязка DataContext работает при отладке, но вызывает исключение при развертывании и запуске

Сообщение Anonymous »

У меня есть приложение WinUI3, которое я пытаюсь использовать в шаблоне MVVM.
У меня есть 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();
}
}
}
}
В моем MainWindow.xaml у меня есть Grid, который я назвал RootGrid, и внутри него TextBox, где Text={Binding TextBoxContent...}. В моем коде MainWindow.xaml.cs я назначаю экземпляр ViewModel RootGrid.DataContext в конце конструктора, намного позже InitializeComponent().

Код: Выделить всё

RootGrid.DataContext = vm;
Это очень похожий шаблон, который я использую в WPF. В Visual Studio это компилируется без ошибок, загружает и идеально привязывает свойство в ViewModel к TextBox.
Однако, если я затем упаковываю приложение в пакет приложений и устанавливаю его на свой компьютер, я могу определить, что возникает исключение, когда 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

Вернуться в «C#»