0

在我的程序中,我想SelectedItemChanged使用 c# 代码隐藏调用一个事件,我只是不确定要作为参数传递什么。这是为了一个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”参数

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

4

3 回答 3

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();
}
于 2013-08-20T13:26:49.537 回答
0

试着打电话

TreeOne_SelectedItemChanged(null, null);

于 2013-08-20T13:17:12.457 回答
0

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

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

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

于 2013-08-20T13:04:35.783 回答