2015-10-16 59 views
0

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

收到此错误:

Cannot implicitly convert type 'void' to 'System.EventHandler'

An object reference is required for the non-static field, method, or property 'Functions.LoadFolderTree()'

目前,我试图运行一个函数然后会填充TreeView,但是如果有一个很好的方法可以从Command中执行,而不需要额外的功能,那么请说。这是我当前的代码:

类> Functions.cs

namespace Duplicate_Deleter.Classes 
{ 
    class Functions 
    { 
     public void LoadFolderTree() 
     { 
      MessageBox.Show("Hello"); 
     } 
    } 
} 

回答

1

有2个问题:

1)您LoadFolderTree功能的签名错误:没有参数,而不是事件处理程序的典型sender/Eventargs参数

2)您需要一个Function对象来调用非静态方法

可能的修正:

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