使用数据注入ViewModel会抛出异常

时间:2010-04-24 09:55:56

标签: mvvm viewmodel inject

我得到了: PresentationFramework.dll中出现'System.NullReferenceException'类型的第一次机会异常

当我为 LessonPlannerViewModel 类的构造函数使用参数时。

我使用datatemplateselector类在每周/每日视图之间切换。

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 :(得分:0)

您可以使用中介模式在初始化后将数据发送到viewmodel。 (使用不带任何参数的viewmodel构造函数)

我使用Laurent Bugnion的MVVM Light ToolKit。一个非常好的,轻量级的mvvm框架。 这包括一个名为Messenger

的调解员

否则,您会找到许多中介模式的来源:Google Search mvvm mediator

相关问题