Сбой DisplayRootView с AV (версия v2.0.0.0 стабильная) в стеке WinRT WP81
-
21-12-2019 - |
Вопрос
Программа "[3188] Sprudelsuche.WP.exe" завершила работу с кодом -1073741819 (0xc0000005) "Нарушение доступа".
Это последняя строка в выходных данных, перед этим я получаю
'Sprudelsuche.WP.exe' (CoreCLR:.):Загружено 'C:\windows\system32\en-US\mscorlib.debug.resources.dll'.Модуль был построен без символов.ОШИБКА [Калибровки.Micro.View]:Исключение System.NullReferenceException:Ссылка на объект не задана для экземпляра объекта.в Caliburn.Micro.View.SetContentPropertyCore (целевое местоположение объекта, вид объекта)
Эффект заключается в том, что приложение ненадолго показывает заставку, а затем сразу же закрывается.
Приложение, о котором идет речь, находится на GitHub по адресу https://github.com/christophwille/Sprudelsuche/blob/master/Source/Sprudelsuche.WP/App.xaml.cs - причина, по которой я начал пробовать DisplayRootView, заключается в том, что DisplayRootViewFor не работает с навигацией позже в приложении (MainViewModel / NavigateTo:Выходные данные показывают, что он активирует новую модель представления, но представление так и не появляется).
Я использую CM в приложении WP8 SL без каких-либо проблем.Однако это поставило меня в тупик, поскольку я не сильно отклонился от образцов CM в этом очень простом порту.(кстати, NavigateToViewModel демонстрирует ту же проблему)
Загрузочная Заметка:Я заметил интересный момент в исходном коде DisplayRootView - обработка фрейма после навигации по сравнению с DisplayRootViewFor.Кроме того, в Хабе привязка на основе конвенции у меня не работала.Я уверен, что делаю что-то не так...
Решение 2
При написании комментариев к ответу mvermef я начал пробовать копировать код в пустой проект / использовать другой вид для запуска.Поскольку это сработало нормально, мое замечание "привязка не работает" напомнило мне, что я перепробовал чертовски много разных подходов, чтобы заставить это работать, и, о чудо, один из них остался в исходном коде:
<Hub Header="spritpreise">
<HubSection Header="SUCHE">
<DataTemplate>
<Grid caliburn:View.Model="{Binding}">
Сбой AV был вызван последней строкой.Превращение его обратно в сетку без привязки CM-VM заставило приложение работать.Забавно, однако, что это приводит к сбою только View-first, а не ViewModel-first.
Другие советы
посмотрите на свою строку кода в PrepareViewFirst(Frame rootFrame)
у вас есть
protected override void PrepareViewFirst(Frame rootFrame)
{
container.RegisterNavigationService(this.RootFrame);
}
вероятно, так и должно быть
protected override void PrepareViewFirst(Frame rootFrame)
{
container.RegisterNaviationService(rootFrame);
}
тогда
DisplayRootView<MainView>();
должно сработать просто отлично;
Редактировать:попробуйте переместить метод PrepareViewFirst() в нижнюю часть переопределения Configure.Существует 2 метода PrepareViewFirst(), один из которых параметризован, а другой нет...используйте метод без параметров в Configure(), закомментируйте вызов в OnLaunched();