简体   繁体   English

如何以编程方式调用treeView.SelectedItemChanged

[英]How to call treeView.SelectedItemChanged programmatically

In my program I would like to call to a SelectedItemChanged event using c# code-behind, I am just unsure about what to pass as parameters. 在我的程序中,我想使用c#代码背后的方法来调用SelectedItemChanged事件,我只是不确定要作为参数传递什么。 This is for a TreeViewItem . 这是针对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? **/);
}

Also, when I try to build this I receive this compiler error that pretty much led to this question... 另外,当我尝试构建它时,我收到此编译器错误,几乎导致了这个问题...

No overload for method TreeOne_SelectedItemChanged takes '0' arguments 方法TreeOne_SelectedItemChanged重载没有接受'0'参数

I'm hoping that this is an easy question, but if I have not provided enough information, or haven't been clear enough please let me know. 我希望这是一个简单的问题,但是如果我没有提供足够的信息,或者不清楚的地方,请告诉我。

Adding to @Bart Friederichs' answer and assuming that you have a reference to your TreeView , you could add the following method: 添加到@Bart Friederichs的答案,并假设您对TreeView有引用,则可以添加以下方法:

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

Then you can simply call this from wherever you like: 然后,您可以随时随地调用此方法:

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

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

The usual design pattern would be to call some kind of processing method, and not to "manually" fire events: 通常的设计模式是调用某种处理方法,而不是“手动”触发事件:

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

Then, from withing your code, you just call processChange() , no need to call TreeOne_SelectedItemChanged . 然后,从处理代码开始,您只需调用processChange() ,而无需调用TreeOne_SelectedItemChanged

try to call 尝试打电话

TreeOne_SelectedItemChanged(null, null); TreeOne_SelectedItemChanged(null,null);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM