我目前正在使用Visual Studio 2010中的C#和XAML创建一个WPF应用程序。
我有一个主网格。在该主网格中,我有一个组栏,您可以选择不同的项目。根据您选择的内容,主网格的中间可能完全不同。我想知道的是,编写中间部分的最佳方法是什么?
现在,我设置的方式是中间的所有内容都是在C#中动态编程的,外部的所有内容都是用XAML编程的。
在C#中我编程:对于每个组条项目,都有一个与之相关的网格(以便可以在其上显示不同的内容)。每个网格都是主网格的子网。必要时,每个网格都可见或隐藏。这是解决这个问题的最好方法吗?
最好的例子是在Outlook 2007中,您的组栏位于右侧。当您在组栏上选择不同的项目(邮件,日历,任务)时,组栏的权限将完全更改。
答案 0 :(得分: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”属性设置为不同的集合类型。