c# - 如何使用 DataTemplate + 触发器在 View 之间切换

标签 c# wpf silverlight mvvm datatemplate

我有一个要求,用户可以在其中切换以树或数据网格中的文本或流程图的形式查看分层数据。

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

我如何根据触发器将 View 应用到我的 ViewModel。

最佳答案

如果要显示的 View 的状态保存在某些枚举属性中,您可以使用 ContentControlDataTriggers例如:

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

(因为样式只在一个地方使用,直接将它设置为ContentControl.Style就可以了,如果你想在多个地方使用它,你应该设置ContentTemplate 而不是,因为否则将只有一个 View 实例由所有控件共享,其样式是 WPF 不允许的(当然 Content 需要设置为 something 用于要应用的模板))

您还可以使用 ElementName 直接绑定(bind)到 ToggleButtonIsChecked当然。相关值将是 TrueFalse{x:Null}

关于c# - 如何使用 DataTemplate + 触发器在 View 之间切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6546436/

相关文章:

wpf - 有人可以教我如何阅读 Storyboard.TargetProperty 及其转换组吗?

wpf - BeforeInsertAnchorable从不调用(Avalon Dock 3.2.0.0)

silverlight - 字体粗细和样式在 silverlight 中未正确映射

silverlight - Silverlight 中异常处理的最佳实践是什么?

c# - 使用 SendGrid 发送带附件的电子邮件

c# - 在 NodeJS 中模拟 C# 溢出

c# - 数组声明中有逗号是什么意思?例如漂浮[,]

c# - 当 Pen 具有 Null 以外的 DashStyle 时,StreamGeometry 不会被栅格化

c# - 计算9 :00 AM -- 6:00 PM之间的时间

silverlight - 向 Silverlight 应用程序添加帮助系统的好方法是什么?