Casper-SC
@Casper-SC
Программист (.NET)

Вылетает исключение в XAML Designer. Иногда вылетает, иногда нет. Подробности в теме с картинками. Сталкивался кто?

Проверил в коде всё, что только можно, не пойму даже что искать. Использую шаблон проекта и библиотеку MvvmLight. В режиме дизайнера не выполняется код, который мог бы приводить к исключениям.

Например:
public class ViewModelLocator : ViewModelLocatorBase
    {
        private readonly IContainer _container;
        private static ViewModelLocator _locator;

        private MainViewModel _designerMainVm;

        /// <summary>
        /// Initializes a new instance of the ViewModelLocator class.
        /// </summary>
        public ViewModelLocator()
        {
            _locator = this;

            LogManager.Logger.LogPath = LocalConfiguration.Instance.Folders.Logs;
            CorrelationsLocator.Initialize();

            if (ViewModelBase.IsInDesignModeStatic)
            {
                return;
            }

            Application.Current.DispatcherUnhandledException += Current_DispatcherUnhandledException;
            Application.Current.MainWindow.Loaded += MainWindow_Loaded;
            Application.Current.MainWindow.Closing += MainWindow_Closing;

            DispatcherHelper.Initialize();

            ProgramIdentification.Initialize(ProgramIdentifier.CbpOperator);

            LocalConfiguration.Instance.Folders.CheckFolders();
            LocalConfiguration.Instance.LoadAppConfig();
            LocalConfiguration.Instance.LoadLocalSettings();

            WpfSingleInstance.AppIsAlreadyRunning += (sender, args) =>
                MessageBox.Show(string.Format("Приложение: {0} уже запущено", args.AppName));
            WpfSingleInstance.Make();

            _container = RegisterDependencies(LocalConfiguration.Instance);
        }

        /// <summary>
        /// Зарегистрировать зависимости
        /// </summary>
        /// <param name="config">Локальная конфигурация программы</param>
        /// <returns></returns>
        private IContainer RegisterDependencies(LocalConfiguration config)
        {
            var builder = new ContainerBuilder();

            builder.RegisterType<MainViewModel>() //Мнемосхема, логика программы
                .OnActivated(e =>
                {
                    var appManager = e.Context.Resolve<L1ApplicationManagerViewModel>();
                    appManager.Main = e.Instance;

                    e.Instance.Title = ProgramIdentification.GetCurrentProgramName();
                    e.Instance.Settings = config.Settings.ApplicationSettings;
                })
                .SingleInstance();

            return builder.Build();
        }

        private void MainWindow_Loaded(object sender, RoutedEventArgs e)
        {
            WindowManager.Instance.Initialize(Application.Current.MainWindow, Main);
            Main.OnWindowLoaded(ApplicationsManager, RecipesEditor, CarsEditor, ClientsEditor);
        }

        private void MainWindow_Closing(object sender, CancelEventArgs e)
        {
            Debug.WriteLine("Начало: MainWindow_Closing");

            Window window = (Window)sender;
            //Main.OnWindowClosing();

            Debug.WriteLine("Конец: MainWindow_Closing");

            if (WindowManager.Instance.OpenMessageDialog(DialogIcons.Help, DialogButtons.YesNo,
                "Выход из программы",
                "Вы действительно хотите завершить работу приложения?") == UserDialogResult.No)
                e.Cancel = true;
            else
            {
                window.Closing -= MainWindow_Closing;
                try
                {
                    LocalConfiguration.Instance.SaveLocalSettings();
                    LocalConfiguration.Instance.SaveCurrentAppConfig();
                }
                catch (Exception ex)
                {
                    LogManager.Logger.AppendException(ex);
                }
            }
        }

        private void Current_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
        {
            LogManager.Logger.AppendException(e.Exception);
            MessageBox.Show(e.Exception.ToString());
        }

        #region Свойства

        public MainViewModel Main
        {
            get
            {
                return !ViewModelBase.IsInDesignModeStatic ?
                    _container.Resolve<MainViewModel>() :
                    _designerMainVm ?? (_designerMainVm =
                    new MainViewModel { Settings = new AppSettings() });
            }
        }
    }

0895b975f1e049f2a1fa06152f0ef380.jpgd79b6b2c30fa40f2b5e18fc615894534.jpg4a234fa6b44a4be99677c0824631ce16.jpg
  • Вопрос задан
  • 201 просмотр
Пригласить эксперта
Ответы на вопрос 2
@Hydro
C#/.NET Developer
Опять Вы наступаете на ОДНИ и ТЕ ЖЕ грабли, пытаясь сделать разметку ВСЕГО приложения в одном дизайнере, да еще и с IoC контейром.
Сходите купите планку ОЗУ.
А когда приложение у заказчика будет зверски тормозить - посоветуйте ему купить комп мощнее.
Ответ написан
@WinnerIT
Программист и фотограф-любитель
Как вариант: не находится стиль элемента или строка в ресурсе.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы