使用数据注入 ViewModel 会引发异常
我得到的结果是: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>
没有参数。
那么现在该怎么办呢?
This I got: A first chance exception of type 'System.NullReferenceException' occurred in PresentationFramework.dll
When I use a parameter for the constructor of my LessonPlannerViewModel class.
I use a datatemplateselector class to switch between weekly/daily view.
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();
...
Is that not allowed? Without the parameter I get no exception...
What do I wrong?
EDIT: NOw I changed the parameter to an integer and got better message ;P
XamlParseException=>
'No matching constructor found on type 'TBM.ViewModel.LessonPlannerViewModel'. You can use the Arguments or FactoryMethod directives to construct this type.' Line number '13' and line position '10'.
ok this is now understandable, that
<UserControl.Resources>
<ViewModel:LessonPlannerViewModel x:Key="LessonPlannerViewModelID" />
</UserControl.Resources>
has no parameter.
So what to do now?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以使用中介模式在初始化后将数据发送到视图模型。
(使用不带任何参数的视图模型构造函数)
我使用 Laurent Bugnion 的 MVVM Light ToolKit。一个非常好的、轻量级的 mvvm 框架。
这包括一个名为 Messenger 的中介器
否则,您会发现调解器模式的许多来源:Google 搜索 mvvm mediator< /a>
You could use a mediator pattern to send the data to the viewmodel after its initialization.
(Using a viewmodel constructor without any parameters)
I use the MVVM Light ToolKit of Laurent Bugnion. A really nice, light framework for mvvm.
This includes a mediator called Messenger
Otherwise you will find many sources for the mediator pattern: Google Search mvvm mediator