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