我正在处理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)。
让我知道是否有人对此有任何想法。感谢任何帮助。
答案 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
}
}