我正在尝试遵循将用户控件的数据上下文连接到要提供数据的视图模型的示例on this page。但是,当我这样做时,然后构建项目时,出现“对象引用未设置为对象实例”错误。我不知道我在这里想念什么。这是我的usercontrol标头中的声明:
<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);
}
这个问题很可能是在做您认为正在做的事情,在xaml中实例化一个视图模型(而不是像第二个示例那样在后面编写代码)。异常很可能来自视图模型上引发异常的内容。
以调试模式运行代码,并查看断点在何处以确定如何解决。