如何使用DataTemplate + Triggers在视图之间切换

Pra*_*eep 1 c# silverlight wpf datatemplate mvvm

我有一个要求,即用户可以切换到以树或数据网格或FlowChart中的文本的形式查看分层数据.

用户可以通过单击切换按钮来执行此操作,该按钮表示:切换模式.我希望以这样的方式完成所有这些操作,因为它只能在View中处理,因为在所有三种情况下ViewModel都是相同的.

如何根据Trigger将View应用于我的ViewModel.

H.B*_*.B. 13

如果要显示的视图的状态保存在某些枚举属性中,则可以使用a ContentControl,DataTriggers例如:

<ContentControl>
    <ContentControl.Style>
        <Style TargetType="{x:Type ContentControl}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding ViewMode}" Value="TreeMode">
                    <Setter Property="Content">
                        <Setter.Value>
                            <uc:TreeModeView />
                        </Setter.Value>
                    </Setter>
                </DataTrigger>
                <DataTrigger Binding="{Binding ViewMode}" Value="GridMode">
                    <Setter Property="Content">
                        <Setter.Value>
                            <uc:GridModeView />
                        </Setter.Value>
                    </Setter>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ContentControl.Style>
</ContentControl>
Run Code Online (Sandbox Code Playgroud)

(因为样式只在一个地方使用,通过直接设置它ContentControl.Style可以工作,如果你想在多个地方使用它,你应该设置ContentTemplate相反,因为否则只有一个视图实例由所有控件共享使用WPF不允许的样式(当然Content需要设置为要应用的模板的东西))

你也可以直接绑定到IsChecked了中ToggleButton使用ElementName的过程.那么相关的值将是True,False{x:Null}.