加载其他窗口,在加载代码时运行代码

时间:2015-10-16 16:41:05

标签: c# wpf treeview

我试图打开一个新窗口,当它打开时,我想运行更多代码来填充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");
        }
    }
}

1 个答案:

答案 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");
    }