wpf - 为什么我的对象引用未设置为对象错误的实例?
问题描述
我正在尝试按照此页面上的示例将用户控件的数据上下文连接到要提供数据的视图模型。但是,当我这样做时,然后构建项目,我收到“对象引用未设置为对象的实例”错误。我不知道我在这里错过了什么。这是我的用户控件标题中的声明:
<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 />
.
我不认为这与其他关于空引用的问题和答案重复的原因是,其他视图和视图模型的编写方式类似,并且不会引发空引用。
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 中实例化一个视图模型(而不是像第二个示例那样隐藏代码)。异常很可能来自视图模型上引发异常的某些东西。
在调试模式下运行代码并查看断点命中的位置以确定如何解决。
推荐阅读
- graphql - 不会出现在您的模型定义中,也不会出现在关系中(Strapi)
- firebase - 带有firebase的时间戳监听器
- python-3.x - 从数组中删除给定元素之前的所有元素
- angular - NGRX 特征缩减器未在 angular9 中初始化
- ios - Ionic v1 - 本机日期选择器的视图仅在 iPhone 7 中不可见(带有取消和选择按钮的白屏)?
- javascript - 如何检查 Linux 系统上的哪个用户?
- r - 在每个参与者的变量内计算
- oracle - Oracle 文本包含和标记有不同的行为
- ruby-on-rails - Rails:参数数量错误(给定 1,预期为 0)
- python - 如何获取按元素值排序的 2d ndarray 的“2d 索引”