在WPF中以编程方式触发Treview项目选择事件

时间:2018-08-07 12:07:22

标签: wpf view tree

我正在处理WPF项目,在其中使用名为SampleTreeItem(SampleTreeView类)的类填充树视图(MainWindow.xaml)。该树视图显示了所选文件夹中的文件。当用户单击树项目(mainWindow.cs)时,后台代码将打开文件,对其进行序列化并从中提取数据。

现在,我通过使用标题模板的类向该树添加一个复选框。 在Mainwindow.cs中有一个名为OnItemSelected的事件,当我从树形视图中选择项目时会触发该事件。

我正在尝试处理Sampletree.cs中复选框的click事件,并且我希望在用户单击复选框时从mainwindow.cs中触发OnItemSelected。

MainWindow.xaml.cs

 private void filesTreeView_OnItemSelected(object sender, RoutedEventArgs e)
        {
            SampleFileTreeItem treeViewItem = e.Source as SampleFileTreeItem;
            if (treeViewItem == null)
                return;

            OpenSampleFile(treeViewItem.FilePath);

        }

这是SampleTree.cs文件中的click事件。

public void CompareSamples_Click(object sender, RoutedEventArgs e)
        {
            //RoutedEvent routedEvent = e.RoutedEvent;
            //e.Handled= true; 
            //e.Source = this;
            //RoutedEventArgs args = new RoutedEventArgs(routedEvent, e);

            RoutedEvent routedEvent = TreeView.SelectedItemChangedEvent;
            e.Source = this;
            RoutedEventArgs args = new RoutedEventArgs(routedEvent, e);

            if (compareSamplesCheckbox.IsChecked == true)
            {
               OnSelected(args);
            }
            else
            {
                //object sender, RoutedEventArgs e

            }


    }

我不知道我在这里缺少什么,但是我无法从SampleTree.cs中触发OnItemSelected(mainWinodw)。

让我知道是否有人对此有任何想法。感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我假设OnSelected(..)是事件处理程序。因此,在您的代码中,您无需调用事件处理程序,而只需为UIElement引发事件:

public void CompareSamples_Click(object sender, RoutedEventArgs e)
{
    RoutedEvent routedEvent = TreeView.SelectedItemChangedEvent;
    e.Source = this;
    RoutedPropertyChangedEventArgs<object> args = new RoutedPropertyChangedEventArgs<object>(oldVal, newVal, routedEvent);

    if (compareSamplesCheckbox.IsChecked == true)
    {
        yourTreeView.RaiseEvent(args);
    }
    else
    {
        //object sender, RoutedEventArgs e
    }
}