【问题标题】:Inject ViewModel with data throws Exception使用数据注入 ViewModel 会引发异常
【发布时间】:2010-04-24 09:55:55
【问题描述】:

我得到了:在 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>

没有参数。

那么现在该怎么办?

【问题讨论】:

    标签: mvvm viewmodel inject


    【解决方案1】:

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

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

    否则你会发现很多中介者模式的来源:Google Search mvvm mediator

    【讨论】:

    • 我已经在使用 laurent 的框架了。但是我看到我的加载策略需要改变,比如在创建类对象时运行 Init 方法来加载数据。
    • 我也有过这样的经历,最好让构造函数保持干净或只注册消息。您可以使用带有抽象方法的抽象基类来进行初始化、激活、重置、刷新和视图模型等操作。
    • 谁在乎... ich akzeptier das als Antwort XD
    猜你喜欢
    • 2021-12-29
    • 2019-11-28
    • 1970-01-01
    • 1970-01-01
    • 2019-02-10
    • 1970-01-01
    • 2014-01-03
    • 1970-01-01
    相关资源
    最近更新 更多