2011-11-28 2 views
2

부모 창에서 파일을 열고 내용을 사용하여 다른 테이블과 컨트롤 (부모 창에 속함)을 채워야합니다. 당신이 부모 (MainWindow를)에서 보는 것처럼 파일 (문자열)의 이름은 내가 정적 인 방법을 사용했다 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); 
      } 

     } 

에 의해 자식 창에 형성된다

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! 
     } 

나는 shouldn 것을 알고있다 심지어 정적 메서드에서 비 정적 멤버에 액세스하려고 시도하지 않습니다. 나는 단지 나의 일을 설명하려고 노력하고있다. WPF (클래스 Window가 XAML에 정의 된)에서 런타임에 부모 윈도우의 인스턴스에 액세스하는 방법이 있습니까? 좀 더 우아하고 단순한 솔루션이 있다면 전체 접근 방식을 바꿀 수 있습니다.

답변

2

가장 간단한 양식에서는 Owner 속성을 통해 부모 창에 대한 참조를 가져 와서 기존 LoadResults 메서드를 인스턴스 메서드로 변경할 수 있습니다.

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

정적 인 메서드로 원하는 모든 인수를 전달하면됩니다. 다른 옵션은 LoadResults 인스턴스 메소드를 정적 인스턴스로 지정하는 것입니다.

관련 문제