Почему в приложении 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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