【发布时间】:2020-02-25 16:33:29
【问题描述】:
我正在尝试按照示例on this page 将用户控件的数据上下文连接到要提供数据的视图模型。但是,当我这样做时,然后构建项目,我收到“对象引用未设置为对象的实例”错误。我不知道我在这里错过了什么。这是我的用户控件标题中的声明:
<UserControl
x:Class="PharmacyWarehouse.View.ProgramSelectView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Platform"
xmlns:convert="clr-namespace:PharmacyWarehouse.View.ValueConverters"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:local="clr-namespace:PharmacyWarehouse.View"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="clr-namespace:PharmacyWarehouse.ViewModel"
Width="500"
Height="420"
Background="Orange"
mc:Ignorable="d">
<UserControl.DataContext>
<vm:ProgramSelectViewModel />
</UserControl.DataContext>
它在抱怨<vm:ProgramSelectViewModel />。
我不认为这与其他关于 nullreference 的问题和答案重复的原因是因为其他视图和视图模型的编写方式类似并且不会引发 nullreference。
ProgramSelectViewModel 中有超过 500 行,所以我不会在这里复制它。我将提供构造函数:
[PreferredConstructor]
public ProgramSelectViewModel() : this(false) { }
//-----------------------------------------------------------------------------------------
// ProgramSelectViewModel
//-----------------------------------------------------------------------------------------
public ProgramSelectViewModel(bool unit_testing)
{
Debug.WriteLine($"ProgramSelectViewModel: In constructor; this == {this.ToString()}");
var connString = MainDataContext.Database.Connection.ConnectionString;
var userRoles = new DatabaseRolesAndPermissions(connString);
perms = userRoles.TablePermissions("PW.Program");
SaveProgramSelectCommand = new RelayCommand(ExecuteSaveProgramSelectCommand, CanSaveProgramSelectCommand);
CancelProgramSelectCommand = new RelayCommand(ExecuteCancelProgramSelectCommand);
Messenger.Default.Register<ProceedWithProgramSelectUpdateMessage>(this, UpdateProgramSelect);
Messenger.Default.Register<OpenProgramSelectMessage>(this, ReadMessageData);
Messenger.Default.Register<ParentObjectMessage>(this, ReceiveParentObjectMessage);
}
【问题讨论】:
-
虚拟机长什么样?
标签: wpf data-binding mvvm-light