【问题标题】:NullReferenceException on TreeView node deselectTreeView 节点上的 NullReferenceException 取消选择
【发布时间】:2013-11-01 20:28:59
【问题描述】:

我的程序中有两个TreeViews,它们以相同的方式处理SelectedItemChanged。问题是一个工作正常,另一个抛出NullReferenceException。取消选择节点时,会在其中一棵树中引发异常...

如何在代码隐藏中为两棵树处理SelectedItemChanged

//How *ViewModel* is declared...
public DatabaseViewModel ViewModel { get { return DataContext as DatabaseViewModel; } }

//Gets selected item in TreeView
private void Tree_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e) 
{
     var data = e.NewValue as TreeModel;
     ViewModel.Tree.SelectedItem = data;
}

基本上是这样的:

-问题树中的一个节点被选中

-接下来,选择表现良好的树中的一个节点

-A NullReferenceException 然后被抛出:ViewModel.Tree.SelectedItem = data. 在问题树的代码隐藏中。异常说:“对象引用未设置为对象的实例”。

这里出了什么问题,我该如何解决?谢谢。

*注意:我只想指出,其他树不会发生这种情况。

【问题讨论】:

  • 你验证过坏情况下的DataContext实际上是DatabaseViewModel的一个实例吗?在抛出异常的那一行设置断点,然后就可以查看DataContext了。

标签: c# wpf treeview selecteditemchanged


【解决方案1】:

试试这个:

//Gets selected item in TreeView
private void Tree_SelectedItemChanged(object sender,RoutedPropertyChangedEventArgs<object> e) 
{
     var data = e.NewValue as TreeModel;
     if(data!=null)
     ViewModel.Tree.SelectedItem = data;
}

【讨论】:

  • 这几乎是如此简单,我可能应该想到它。无论如何,谢谢它工作得很好! =)
  • @Ericafterdark : :) 欢迎您,我很高兴为您提供帮助。
猜你喜欢
  • 1970-01-01
  • 2016-09-30
  • 1970-01-01
  • 1970-01-01
  • 2011-07-30
  • 1970-01-01
  • 2010-10-22
  • 1970-01-01
  • 2021-04-05
相关资源
最近更新 更多