C# 一个区域中的多个栅格

C# 一个区域中的多个栅格,c#,wpf,.net-4.0,C#,Wpf,.net 4.0,我目前正在Visual Studio 2010中使用C#和XAML创建一个WPF应用程序 我有一个主网格。在主网格中,我有一个组栏,您可以选择不同的项目。根据所选内容,主栅格的中间可以完全不同。我想知道的是,对中间部分进行编程的最佳方式是什么 现在,我已经建立了这样一种方法,中间的所有东西都是在C语言中动态编程的,外面的一切都是用XAML编程的。p> 在C#I编程中:对于每个组栏项目,都有一个与之配套的网格(以便可以在其上显示不同的内容)。每个栅格都是主栅格的子栅格。每个栅格在必要时可见或隐藏。

我目前正在Visual Studio 2010中使用C#和XAML创建一个WPF应用程序

我有一个主网格。在主网格中,我有一个组栏,您可以选择不同的项目。根据所选内容,主栅格的中间可以完全不同。我想知道的是,对中间部分进行编程的最佳方式是什么

现在,我已经建立了这样一种方法,中间的所有东西都是在C语言中动态编程的,外面的一切都是用XAML编程的。p> 在C#I编程中:对于每个组栏项目,都有一个与之配套的网格(以便可以在其上显示不同的内容)。每个栅格都是主栅格的子栅格。每个栅格在必要时可见或隐藏。这是最好的方法吗


最好的例子是在Outlook 2007中,您的组栏位于右侧。当您在组栏上选择不同的项目(邮件、日历、任务)时,组栏的右侧会完全改变。

在WPF中,最简单的方法是为每个“中间”部分定义数据模板

使用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>

... 将用于显示邮箱内容的XAML放在此处。。。
... 将用于显示日历的XAML放在此处。。。
... 将用于显示待办事项列表的XAML放在此处。。。

使用此设置,切换内部网格所需做的就是将视图模型中的“SelectedCollection”属性设置为不同的集合类型。

SelectedCollection是否为ICollection?可能是,但我可能会将其声明为Object,甚至可能会将其重命名为“CurrentView”或类似的名称。从理论上讲,您最终可能会创建可由组栏选择的视图,而对于这些视图,“集合”将是一个误称。主要的一点是,视图模型中有一个属性,其中包含一个要显示在“中间”区域的模型对象。ContentPresenter的任务是自动选择适当的数据模板来显示它。在Outlook示例中,“中间”的每个视图都是一个集合,因此我将其命名为“SelectedCollection”