2012-04-17 6 views
2

MY 응용 프로그램에는 3 페이지 (간단한 선택이 이루어진 곳에서는 한 개의 MainWindow와 2 페이지)가 있습니다.동일한 창에서보기 전환 페이지의 새 인스턴스를 만들지 않고 WPF

현재 다음 네비게이션 구조를 사용하여 페이지 http://azerdark.wordpress.com/2010/04/23/multi-page-application-in-wpf/ 사이를 전환합니다. 기본적으로 인터페이스를 사용하여 페이지 참조를 전달하고 새 인스턴스를 만듭니다.

아이디어는 한 번에 하나의 창만 열 수 있다는 것입니다. 예를 들어 페이지 A에서 B로 이동하면 B가 A의 내용을 바꿉니다. 순서는 항상 A -> B -> C -> A (기본 창으로 돌아 가기) 또는 A -> B -> A.입니다.

모든 내용이 항상 1 개의 창에 표시됩니다. 내 현재 솔루션으로 나는 페이지의 새로운 인스턴스를 인스턴스화 할 때마다 (예를 들어 A -> B -> A는 결과로 2x New PageA()를가집니다.)

차례 차례로 난 정말 안 좋아하는 정적 메서드와 클래스를 많이 사용하는 데에.

내 현재 응용 프로그램 탐색 구조의 전체 점검을 필요로하지 않습니다 이것에 대한 더 나은 솔루션이 있습니까? 내 현재에

솔루션 정적 인 ObversableCollection 목록을 사용하여 동적으로 생성되는 여러 컨트롤을 기억하므로 페이지 A (mainWindow)로 돌아갈 때 모든 것이 동일하게 유지됩니다.

미리 감사드립니다.

+1

'this.Content = nextPage;'가 잘못되었을 수 있습니다. 현재 페이지가 범위를 벗어나 가비지 수집기에 의해 처리되지 않으면 실행되지 않으므로 동일한 페이지의 인스턴스가 실제로는 없을 것입니다. 당신이 사용하는 솔루션은 내게 꽤 좋은 것 같습니다 –

답변

5

나는 왜 그런 간단한 설정 (3 페이지 및 고정 탐색 구조)에서 탐색을 사용하겠습니까? 많은 쉬운 방법은 다음과 같습니다

  1. 사용 MainWindow를 내용 자리로
  2. 는 별개의 속성 페이지를 유지하는 정적 클래스를 정의 페이지로 된 UserControls을 만듭니다. 필요할 경우 초기화하십시오 (싱글 톤 인스턴스).
  3. 페이지를 변경하려면 MainWindow.SetPage (Pages.First)를 사용하십시오. 코드에서

이 거의 같을 것이다 : 당신이 정말로 탐색을 필요로하는 경우

public class MainWindow : Window 
{ 
    // ... 
    public void SetPage(UserControl page) 
    { 
     this.Content = page; 
    } 
} 

// ... 

public static class Pages 
{ 
    private FirstUserControl _first; 
    private SecondUserControl _second; 
    private ThirdUserControl _third; 
    private MainWindow _window = Application.Current.MainWindow; 

    public UserControl First 
    { 
     get 
     { 
      if (_first == null) 
       _first = new FirstUserControl(); 
      return _first; 
     } 
    } 
    // ... 
} 

// Somewhere in B (after A -> B) 

    MainWindow.SetPage(Pages.First); 

비록, 당신은 그것의 단지 정적 인 부분을 사용하고 SwitchPage 방법에 singletoned 인스턴스를 전달할 수 .

+0

Ty 답장을 위해, 내가 그것을 변화와 함께 귀찮게해야합니까? 좀 더 이해가가는 작은 탐색을 위해 : – Rakr

+0

다릅니다. 두 가지 방법의 장단점을 비교 검토해야합니다. –

+0

'A'와'B'로 무엇을 말하고 있습니까? –

1
public partial class MainWindow : Window 
{ 

    string un; 
    string pw; 

    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    private void Button_Click_1(object sender, RoutedEventArgs e) 
    { 

     un = txtName.Text; 
     pw = txtPw.Text; 

     if (un.Equals("steve") && pw.Equals ("cool")) 
     { 
      Home h= new Home(); 
      this.Content = h.Content; ***// this is where we change the window's contents*** 


     } 
    } 
} 
관련 문제