2010-01-19 4 views
0

현재 합성 방법론이 적합한 글을 .... 쓰는 중입니다. 거의!WPF : 페이지 네비게이션을 사용한 복합 애플리케이션

앞뒤 탐색을위한 저널 유지 관리를 포함하여보기간에 이동하는 방법이 필요합니다.

Page 파생 전망과 저널과 편리한 NavigationWindow 쉘 무엇의 UserControl 파생 전망 한 손 단일 Window 기반 CAG 쉘에,이 두 가지 방법을 결합하는 가장 좋은 방법은, 다른 한편으로

?

감사합니다.

답변

4

NavigationWindow에는 Pages이 아닌 무엇이든 표시 할 수 있습니다. 간단한 방법은 표시하려는 각 ViewModel에 대해 NavigationWindow의 리소스에 DataTemplate을 정의하는 것입니다. 주의 ViewModel의 속성에 NavigationWindowContent 속성을 바인딩하면됩니다 : 해당 속성을 변경하면 NavigationWindow의 콘텐츠를 업데이트하고 해당 DataTemplate


UPDATE

자동으로 포착됩니다 방금 NavigationWindow을 사용했던 광산 프로젝트의 코드를 살펴 봤습니다. 실제로 나는 실수로, Content을 묶어서 작동하지 않습니다. (또는 어쩌면 작동하지만, 그것이 내가 한 것과 다릅니다.) 대신 메서드를 호출하여 내비게이션을 처리하는 App 클래스로 구현되는 INavigationService 인터페이스를 만들었습니다. 이렇게하면 내비게이션 기록이 NavigationWindow에 의해 유지됩니다. 여기

내 프로젝트에서 추출물의

MainWindow.xaml :

<NavigationWindow x:Class="MyApp.MainWindow" 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:vm="clr-namespace:MyApp.ViewModel" 
        xmlns:view="clr-namespace:MyApp.View" 
        Title="{Binding Content.DisplayName, RelativeSource={RelativeSource Self}, FallbackValue=The Title}" 
        Height="600" Width="800"> 
    <NavigationWindow.Resources> 
     <DataTemplate DataType="{x:Type vm:HomeViewModel}"> 
      <view:HomeView /> 
     </DataTemplate> 
     <DataTemplate DataType="{x:Type vm:CustomerViewModel}"> 
      <view:CustomerView /> 
     </DataTemplate> 
    </NavigationWindow.Resources> 
</NavigationWindow> 

App.xaml.cs를 :

... 

    private void Application_Startup(object sender, StartupEventArgs e) 
    { 
     LoadConfig(); 

     MyApp.MainWindow window = new MainWindow(); 
     INavigationService navigationService = this; 
     HomeViewModel viewModel = new HomeViewModel(navigationService); 
     this.MainWindow = window; 
     window.Navigate(viewModel); 
     window.Show(); 
    } 

내가 다른보기로 이동합니다 , 난 그냥 ViewModel 매개 변수로 Navigate 메서드를 호출하고 WPF 자동 자원에서 적절하게 DataTemplate을 선택합니다.

+0

멋지고 간단한 해결책이지만 내 취향에 너무 간단합니다. 내가 가지고있는 문제점 : 저널링, 평생 관리보기, 상태보기, 탐색 기록에서의 여러보기, 페이지 모드 (보기를 모달 방식으로 호출 할 수있는 기능). 아니면 해결책을 완전히 이해하지 못했을 수도 있습니다. 조금 더 자세히 설명해 주시겠습니까? –

+0

또 다른 관심사는 상대적으로 독립된 방식으로보기를 개발하는 기능입니다 (셸에서 분리됨). 기본적으로, 나는 CAG를 전혀 사용해서는 안되지만 CAG처럼 일반적인'NavigationWindow'를 만들기위한 임시 해결책을 사용한다고 말하고 있습니다. 하지만 CAG가 제공하는 장점, 모듈의 동적 로딩, 독립 모듈 개발 등을 잃어 가고 있습니다. –

+0

추가 세부 사항을 보내 주셔서 감사합니다.하지만 저는 여전히 행복하지 않습니다. 당신이 말하는 것은 '일반적인 네비게이션 애플리케이션을 만들고 CAG 파트를 직접 구현하는 것'입니다. 즉, 단일 컨테이너, 모듈의 동적 로딩, 뷰의 데이터 템플릿 동적 생성 등을 제공해야합니다. 다른 방향으로 가고, CAG를 사용하고 탐색과 저널링을 구현하십시오.+1 적어도 ** 내가 원하지 않는 ** :-)을 보여주기 위해 +1 –

관련 문제