Внедрить ViewModel с исключениями данных - PullRequest
0 голосов
/ 24 апреля 2010

Это я получил: Первое случайное исключение типа System.NullReferenceException произошло в PresentationFramework.dll

Когда я использую параметр для конструктора моего LessonPlannerViewModel класса.

Я использую класс dateatemplateselector для переключения между недельным / дневным просмотром.

public class ApplicationNavigationTemplateSelector : DataTemplateSelector
{
    public override DataTemplate SelectTemplate(object item, DependencyObject container)
    {
        if (item is LessonPlannerViewModel)
        {
            var vm = item as LessonPlannerViewModel;
            Window window = Application.Current.MainWindow;                

            if (vm.IsDailyView)
                return window.FindResource("dailyViewTemplate") as DataTemplate;
            else
                return window.FindResource("weeklyViewTemplate") as DataTemplate;
        }
        return base.SelectTemplate(item, container);
    } 
}

public LessonPlannerViewModel(DateTime asOfDate)
    {
        _asOfDate = asOfDate;

        if(_isDailyView) 
            LoadDailyData();
        if(_isWeeklyView)
            LoadWeeklyData();

...

Разве это не разрешено? Без параметра я не получаю исключения ...

Что я не прав?

РЕДАКТИРОВАТЬ: НЕТ Я изменил параметр на целое число и получил лучшее сообщение; P

XamlParseException => 'Не найдено подходящего конструктора для типа' TBM.ViewModel.LessonPlannerViewModel '. Вы можете использовать директивы Arguments или FactoryMethod для создания этого типа. ' Номер строки «13» и позиция «10».

хорошо, теперь понятно, что

<UserControl.Resources>
    <ViewModel:LessonPlannerViewModel x:Key="LessonPlannerViewModelID" />
</UserControl.Resources>

не имеет параметров.

Так что же теперь делать?

1 Ответ

0 голосов
/ 26 апреля 2010

Вы можете использовать шаблон-посредник для отправки данных в модель представления после ее инициализации. (Использование конструктора модели представления без параметров)

Я использую MVVM Light ToolKit Лорана Бюньона. Действительно хороший, легкий каркас для mvvm. Это включает посредника под названием Messenger

В противном случае вы найдете много источников для шаблона посредника: Поиск Google mvvm mediator

...