2010-06-15 46 views
1

我目前正在Visual Studio 2010中使用C#和XAML創建一個WPF應用程序。在一個區域中的多個網格

我有一個主柵格。在該主網格中,我有一個組欄,您可以選擇不同的項目。根據您選擇的內容,主網格的中間可以完全不同。我想知道的是,編寫中間部分的最佳方法是什麼?

現在,我建立了這樣一種方式,即中間的所有內容都是用C#動態編程的,而外部的所有內容都是用XAML編程的。

在C#編程中:對於每個組欄項目,都有一個與之配合的網格(以便可以顯示不同的內容)。每個網格都是主網格的子節點。每個網格在必要時都可見或隱藏。這是處理這個問題的最好方法嗎?

最好的例子是在Outlook 2007中,右邊有你的組欄。當您在組欄上選擇不同的項目(郵件,日曆,任務)時,組欄的右側會完全更改。

回答

1

在WPF中執行此操作的簡單方法是爲每個「中間」部分定義DataTemplates。

使用Outlook示例,您可能有一個存儲消息列表的MessageCollection類,一個存儲日曆事件列表的EventCollection類以及一個存儲任務列表的TaskCollection類。

在您的「中間」區域,您只需擁有一個ContentPresenter,其內容將設置爲MessageCollection,EventCollection或TaskCollection。據推測,這可以通過綁定視圖模型屬性來完成。

下面是如何看起來:

<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 2010-06-15 22:48:14

+0

它可能是,但我可能會聲明它爲Object,甚至可能將其重命名爲「CurrentView」或類似的東西。從理論上講,您最終可能會創建可通過組欄選擇的視圖,並且「集合」會成爲用詞不當。重點是您的視圖模型中有一個屬性,其中包含要在「中間」區域中顯示的模型對象。 ContentPresenter的工作是自動選擇適當的DataTemplate來顯示它。在Outlook示例中,「中間」中的每個視圖都是一個集合,所以我將其命名爲「SelectedCollection」。 – 2010-06-15 22:59:14

相關問題