2010-06-15 3 views
1

Visual Studio 2010에서 C# 및 XAML을 사용하여 WPF 응용 프로그램을 만들고 있습니다.하나의 영역에 여러 개의 격자가 있음

나는 마스터 그리드가 있습니다. 마스터 그리드에는 다른 항목을 선택할 수있는 그룹 바가 있습니다. 선택한 항목에 따라 마스터 그리드의 중간이 완전히 다를 수 있습니다. 내가 궁금해 한 것은 중간 부분을 프로그래밍하는 가장 좋은 방법은 무엇입니까?

지금 당장 중간에있는 모든 내용이 C#에서 동적으로 프로그래밍되고 외부의 모든 내용이 XAML에서 프로그래밍되도록 설정했습니다.

C#에서는 프로그래밍 된 : 각 그룹 바 항목에 대해 다른 그리드가 표시 될 수 있도록 그리드가 있습니다. 각 그리드는 마스터 그리드의 하위입니다. 필요한 경우 각 표가 표시되거나 숨겨집니다. 이것을 접근하는 가장 좋은 방법입니까?

가장 좋은 예는 Outlook 2007의 그룹 바가 오른쪽에있는 경우입니다. 그룹 바 (메일, 캘린더, 작업)에서 다른 항목을 선택하면 그룹 바의 권한이 완전히 변경됩니다.

답변

1

WPF에서이 작업을 수행하는 쉬운 방법은 각 "중간"섹션에 대해 DataTemplates를 정의하는 것입니다.

Outlook 예제를 사용하면 메시지 목록을 저장하는 MessageCollection 클래스, 일정 이벤트 목록을 저장하는 EventCollection 클래스 및 작업 목록을 저장하는 TaskCollection 클래스를 가질 수 있습니다.

"중간"영역에는 Content가 MessageCollection, EventCollection 또는 TaskCollection으로 설정되는 단일 ContentPresenter 만 있으면됩니다. 아마도 이것은 뷰 모델 속성에 대한 바인딩을 사용하여 수행됩니다. 여기

는 보일 수 있습니다 방법입니다

<Window ...> 
    <Grid> 
    <!-- group bar area --> 
    ... 

    <!-- "middle" area --> 
    <ContentPresenter Grid.Row="1" Grid.Column="1" 
         Content="{Binding SelectedCollection}" /> 
    </Grid> 
</Window> 

지금 당신은 예를 들어, 컬렉션 유형 각각에 대한 DataTemplate을 만들기 :이 설정으로

<DataTemplate TargetType="{x:Type my:MessageCollection}"> 
    <Grid> 
    ... put the XAML for displaying mailbox contents here ... 
    </Grid> 
</DataTemplate> 

<DataTemplate TargetType="{x:Type my:EventsCollection}"> 
    <Grid> 
    ... put the XAML for displaying a calendar here ... 
    </Grid> 
</DataTemplate> 

<DataTemplate TargetType="{x:Type my:TasksCollection}"> 
    <Grid> 
    ... put the XAML for displaying a to-do list here ... 
    </Grid> 
</DataTemplate> 

, 모두 당신이해야 할 내부 격자를 전환하면보기 모델의 "SelectedCollection"속성을 다른 컬렉션 유형으로 설정할 수 있습니다.

+0

SelectedCollection은 ICollection입니까? – Berryl

+0

그럴 수도 있지만 Object로 선언하고 "CurrentView"또는 그와 비슷한 것으로 이름을 바꿀 수도 있습니다. 이론적으로 그룹 바에 의해 선택 될 수있는 뷰를 생성 할 수 있고 "콜렉션"은 잘못된 명칭이 될 수 있습니다. 요점은 "중간"영역에 표시 할 모델 객체가 포함 된 뷰 모델의 속성을 가지고 있다는 것입니다. ContentPresenter의 임무는 적절한 DataTemplate을 자동으로 선택하여 표시하는 것입니다. Outlook 예제에서 "중간"의 모든 뷰는 컬렉션이므로 그 이름을 "SelectedCollection"으로 지정했습니다. –

관련 문제