我试图打开一个新窗口,当它打开时,我想运行更多代码来填充TreeView。我想从命令中执行此操作,因此我不需要在窗口后面添加任何代码。
这是我的命令:
课程> Commands.cs
/// <summary>
/// Command: SelectFolder
/// </summary>
#region SelectFolder
public static RoutedUICommand SelectFolder
{
get { return _SelectFolder; }
}
public static void SelectFolder_Executed(object sender,
ExecutedRoutedEventArgs e)
{
Window FolderDialog = new Views.FolderExplorer();
FolderDialog.Show();
//Bind Commands
Classes.MyCommands.BindCommandsToWindow(FolderDialog);
FolderDialog.ContentRendered += Functions.LoadFolderTree();
}
public static void SelectFolder_CanExecute(object sender,
CanExecuteRoutedEventArgs e)
{
e.CanExecute = true;
}
#endregion
出现此错误:
无法隐式转换类型&#39; void&#39;到&#39; System.EventHandler&#39;
非静态字段,方法或者需要对象引用 property&#39; Functions.LoadFolderTree()&#39;
目前我正在尝试运行一个函数,然后填充TreeView,但是如果有一个很好的方法可以在Command中执行它而不需要额外的功能那么请说。这是我目前的代码:
课程&gt; Functions.cs
namespace Duplicate_Deleter.Classes
{
class Functions
{
public void LoadFolderTree()
{
MessageBox.Show("Hello");
}
}
}
答案 0 :(得分:1)
有两个问题:
1)您的LoadFolderTree函数具有错误的签名:没有参数而不是eventhandler的典型sender / Eventargs参数
2)您需要一个Functions对象来调用非静态方法
可能的解决方法:
1)使函数静态并添加正确的参数
public class Functions
{
public static void LoadFolderTree(object sender, EventArgs eventArgs)
{
MessageBox.Show("Hello");
}
}
2)从函数实例调用函数并添加正确的参数
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
var f = new Functions();
ContentRendered += f.LoadFolderTree;
}
}
public class Functions
{
public void LoadFolderTree(object sender, EventArgs eventArgs)
{
MessageBox.Show("Hello");
}
}
3)最佳方式:只需添加默认的事件处理程序即可。输入“ContentendRendered + =”,然后按“tab”两次以自动添加正确的事件处理程序
public MainWindow()
{
InitializeComponent();
ContentRendered += MainWindow_ContentRendered;
}
void MainWindow_ContentRendered(object sender, EventArgs e)
{
MessageBox.Show("Hello");
}