2011-10-06 7 views
3

기본 탐색 열 (ListBox)이있는 창과 현재 선택된 항목에 대한 상세보기가 있습니다. ListBox에서 항목을 선택하면 상세보기에 선택한 항목과 관련된 일련의 컨트롤 (편집 가능한 텍스트 필드 등)이 표시됩니다.프레임 컨트롤 내의 페이지로 메시지를 보내려면 어떻게해야합니까?

지금까지 프레임을 변경하여 다른 페이지를 표시 할 수 있도록했습니다. Frame.Source. 또한, 내가 처음 클릭했을 때 선택된 목록 상자 항목에서 정보를로드하고 목록보기의 선택한 항목이 변경 될 때 세부 사항보기에 표시된 정보를 동일한 항목으로 다시 저장하도록 페이지를 원합니다.

Pages와 MainWindow는 서로 다른 XAML 파일에 있기 때문에 본질적으로 서로 볼 수는 없습니다. 어떻게 그런 메시지를 전달하겠습니까? JSON 호출과 개념적으로 비슷한 것을 생각 중이며, 일련의 매개 변수를 다른 페이지로 전달하고 응답을받을 수 있습니다.

아래 답변 덕분에 This guide about NavigationServices이 발견되었습니다. 이 코드 예제는 특히 관련이었다 내가 할 필요가 무엇

Customer selectedCustomer = (Customer)listBox.SelectedItem; 
this.NavigationService.Navigate(new CustomerDetailsPage(selectedCustomer)); 

내가 인수로 전달할 원하는 객체에 새 페이지의 생성자를 호출했다. 객체가 참조로 전달되므로이 객체에 대한 변경 사항은 객체가있는 응용 프로그램의 다른 영역에 자동으로 반영됩니다. Page1 호스트 프레임이 프레임에서 NavigationService.Navigated 이벤트에 다음 Page2로 이동 MyFrame을 말한다면

답변

2

나는 .... 생각

 MyFrame.NavigationService.Navigated += 
     (sender, e) => 
      { 
        var nextPageContent = MyFrame.NavigationService.Content; 
        //// this is the root of the content of Page2. 
      } 

nextPageContent가 제공 할 수 있습니다 자신의 DataContext 등 ...

+0

좋아, 그럼 nextPageContent.DataContext = [MainWindow의 DataContext] 같은 것을 할 수 있습니까? – ford

+0

시도해보십시오. –

관련 문제