从父窗口我需要打开一个文件并使用其内容填充不同的表和控件(属于父窗口)。文件名(字符串)由子窗口中的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);
}
}
正如您在Parent(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中定义类Window)在运行时访问Parent窗口的实例而不是其方法?如果有更优雅,更简单的解决方案,我不介意改变整体方法。
答案 0 :(得分:2)
以最简单的形式,您可以通过Owner
属性获取对父窗口的引用,并将现有的LoadResults
方法更改为实例方法。
MainWindow parent = this.Owner as MainWindow;
parent.LoadResults(fileName);
答案 1 :(得分:0)
如果你想让你的方法静态,只需传递你需要的所有参数。另一个选项是使您的LoadResults
实例方法实例化为静态。