动态显示网格内容

时间:2011-09-28 15:52:46

标签: wpf layout grid itemscontrol

我有3种不同的布局(类似于我猜你会称之为Skins,但布局是非常不同的,而不仅仅是颜色和字体的改变),这是我为我的应用程序开发的。布局用于显示相同的数据,但格式完全不同。这些布局中的每一个都是在自己的Grid中构建的。

我希望我的应用程序根据运行时可用的字符串值来决定动态显示哪个布局。

让父网格动态显示子网格的最佳方法是什么?

我正在尝试找到某种神奇的DataTemplate / DataBinding / Templating方法,但似乎无法找到最佳方法。或者,我应该看一下显示这些不同布局的不同方法吗?像ItemsControl或类似的东西?

1 个答案:

答案 0 :(得分:1)

我通常使用ContentControl和DataTrigger来确定要使用的ContentTemplate。

例如,

<ContentControl Content="{Binding MyViewModel}">

    <ContentControl.Resources>
        <DataTemplate x:Key="DefaultTemplate">
            <TextBlock Text="DefaultTemplate" />
        </DataTemplate>

        <DataTemplate x:Key="TemplateA">
            <TextBlock Text="Template A" />
        </DataTemplate> 

        <DataTemplate x:Key="TemplateB">
            <TextBlock Text="Template B" />
        </DataTemplate>
    </ContentControl.Resources>

     <ContentControl.Style>
         <Style TargetType="{x:Type ContentControl}">
             <Setter Property="ContentTemplate" Value="{StaticResource DefaultTemplate}" />
             <Style.Triggers>
                 <DataTrigger Binding="{Binding SelectedView}" Value="ViewA">
                     <Setter Property="ContentTemplate" Value="{StaticResource TemplateA}" />
                 </DataTrigger>
                 <DataTrigger Binding="{Binding SelectedView}" Value="ViewB">
                     <Setter Property="ContentTemplate" Value="{StaticResource TemplateB}" />
                 </DataTrigger>
             </Style.Triggers>
         </Style>
     </ContentControl.Style>

 </ContentControl>