C# 将文件名(字符串参数)从子窗口传递到父窗口的非静态方法

C# 将文件名(字符串参数)从子窗口传递到父窗口的非静态方法,c#,wpf,parent,C#,Wpf,Parent,从父窗口中,我需要打开一个文件,并使用其内容填充不同的表和控件(属于父窗口)。文件名(字符串)由DataGrid.SelectedItem在子窗口中形成 private void LoadResultsCommand_Executed(object sender, ExecutedRoutedEventArgs e) { var row = pastTestResultsDataGrid.SelectedItem as DataRowView;

从父窗口中,我需要打开一个文件,并使用其内容填充不同的表和控件(属于父窗口)。文件名(字符串)由DataGrid.SelectedItem在子窗口中形成

private void LoadResultsCommand_Executed(object sender, ExecutedRoutedEventArgs e)
        {
            var row = pastTestResultsDataGrid.SelectedItem as DataRowView;

            if (row != null)
            {
                string fileName = row[0] + " " + row[1] + " " + row[2] + " " + row[3] + " " + row[4] + " " + 
                    ((DateTime)row[6]).ToShortDateString().Replace('/', '-') + " " + ((DateTime)row[7]).ToShortDateString().Replace('/', '-') + " .dat";
                MainWindow.LoadResults(fileName);
            }

        }
正如您在父窗口(MainWindow)中看到的,我必须使用静态方法

public static void LoadResults(string fileName)
        {
            string fullFileName = @"C:\Users\Public\Documents\Test Data\" + fileName;
            var binFormat = new BinaryFormatter();
            var testData = new TestData();

            if (File.Exists(fullFileName))
            {
                using (Stream fStream = new FileStream(fullFileName, FileMode.Open))
                {
                    testData = (TestData) binFormat.Deserialize(fStream);
                }
            }    
            //here I am trying to load data from testData instance of TestData class into data 
            //tables or set Text property of a TextBox. Can't access them from a static method!
        }

我知道我甚至不应该尝试从静态方法访问非静态成员。我只是想解释一下我的任务。WPF(类窗口在XAML中定义)中是否有任何方法可以在运行时访问父窗口的实例,而不是它的方法?如果有更优雅、更简单的解决方案,我不介意更改总体方法。

以最简单的形式,您可以通过
Owner
属性获取对父窗口的引用,并将现有的
LoadResults
方法更改为实例方法

MainWindow parent = this.Owner as MainWindow;
parent.LoadResults(fileName);

如果希望方法是静态的,只需将所需的所有参数传递给它即可。另一个选项是将您的
LoadResults
实例方法设置为static