当我通过COMMAND调用ShowRevertInventorySignDialogView()
时,事件抛出ObjectNullException。我认为Object不会被处理为CurrentViewModel
属性。
Command调用的GetReport()
和ShowRevertInventorySignDialogView()
函数绑定到按钮。我很确定首先调用GetReport()
函数,以便在引发事件之前创建对象。
我在这里缺少什么?
class MainWindowViewModel : ViewModel{
public ViewModel CurrentViewModel
{
get { return currentViewModel; }
set { currentViewModel = value; NotifyPropertyChanged(); }
}
public void GetReport()
{
inventoryReportViewModel = new InventoryReportViewModel();
inventoryReportViewModel.OnStatusChange += Event_OnStatusChange;
CurrentViewModel = inventoryReportViewModel;
}
}
public class InventoryReportViewModel : InventoryBaseViewModel
{
public event EventHandler<StatusChangeEventArgs> OnStatusChange;
private void ShowRevertInventorySignDialogView()
{
OnStatusChange(this, new StatusChangeEventArgs("test",10));
....
....
}
}
XAML;
<ContentControl Content="{Binding Path=CurrentViewModel}" Margin="20 10 20 0"></ContentControl>
答案 0 :(得分:0)
在举起活动之前检查是否有任何订阅者:
private void ShowRevertInventorySignDialogView()
{
if (OnStatusChange != null)
OnStatusChange(this, new StatusChangeEventArgs("test", 10));
//or simply: OnStatusChange?.Invoke(this, new StatusChangeEventArgs("test", 10));
}
然后你应该至少摆脱异常。
由于您还没有向我们展示调用GetReport()
方法的方式和位置,或者任何其他细节,因此无法说明ShowRevertInventorySignDialogView
方法时为什么没有订阅者被叫。
答案 1 :(得分:0)
我发现问题的出现是因为XAML中viewModel的显式定义。我删除下面的行,现在我可以将正确的对象作为viewModel。 (我在DataTemplate中定义了VM)
<UserControl.DataContext>
<vm:InventoryReportViewModel />
</UserControl.DataContext>