【问题标题】:How to call treeView.SelectedItemChanged programmatically如何以编程方式调用 treeView.SelectedItemChanged
【发布时间】:2013-08-20 12:59:32
【问题描述】:

在我的程序中,我想使用 c# 代码隐藏调用 SelectedItemChanged 事件,我只是不确定要作为参数传递什么。这是给TreeViewItem

//Gets selected item in TreeView
private void TreeOne_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
    MainWindowViewModel.SelectedItem = e.NewValue as TreeViewItem;
}

//I'm calling the SelectedItemChanged event from a RightButtonDown event
private void TreeOne_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
    TreeOne_SelectedItemChanged(/* What would go here? **/);
}

另外,当我尝试构建它时,我收到这个编译器错误,这几乎导致了这个问题......

方法 TreeOne_SelectedItemChanged 没有重载采用 '0' 参数

我希望这是一个简单的问题,但如果我没有提供足够的信息,或者不够清楚,请告诉我。

【问题讨论】:

  • 你能显示更多代码吗?
  • 好的,请检查我的问题。

标签: c# wpf treeview selecteditemchanged


【解决方案1】:

添加到@Bart Friederichs 的答案并假设您引用了您的TreeView,您可以添加以下方法:

private void SetSelectedItem()
{
     MainWindowViewModel.SelectedItem = TreeOne.SelectedItem;
}

然后你可以简单地从任何你喜欢的地方调用它:

private void TreeOne_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
    SetSelectedItem();
}

private void TreeOne_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
    SetSelectedItem();
}

【讨论】:

  • 这也很好用,谢谢。我将答案更改为这个,因为我现在正在使用它。
【解决方案2】:

通常的设计模式是调用某种处理方法,而不是“手动”触发事件:

private TreeOne_SelectedItemChaned(object sender, 
                        RoutedPropertyChangedEventArgs<object> e) {
    processChange();
}

然后,使用您的代码,您只需调用processChange(),无需调用TreeOne_SelectedItemChanged

【讨论】:

  • 那么processChange() 到底去了哪里?如果您查看我的代码,您会发现我在SelectedItemChanged 下执行了一些操作。我仍然希望这些发生。
  • 你的情况很有趣。从TreeOne_MouseRightButtonDown 拨打电话时,您会从哪里获得e.NewValue
  • 最初我只是尝试在我的TreeOne_MouseRightButtonDown 事件中使用MainWindowViewModel.SelectedItem = e.NewValue as TreeViewItem,但我收到了与NewValue 相关的编译器错误。这就是为什么我想改为打电话给SelectedItemChanged
【解决方案3】:

试着打电话

TreeOne_SelectedItemChanged(null, null);

【讨论】:

  • 这将在e.NewValue 上产生一个NullPointerException
  • 确实如此,但我只是说if(e == null) return;if(sender == null) return;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-15
  • 2014-04-15
相关资源
最近更新 更多