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

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

用户可以通过单击切换按钮来执行此操作,切换按钮说明:切换模式。 我希望以这样的方式完成所有这些,只有在ViewModel的所有三种情况下都可以在View中处理它。

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

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

      

(因为样式只在一个地方使用,通过将其直接设置为ContentControl.Style这将起作用,如果你想在多个地方使用它,你应该设置ContentTemplate ,因为否则只会有一个视图实例所有控件都使用WPF不允许的样式共享(当然Content需要设置为要应用的模板的内容))

您也可以使用ElementName直接绑定到ToggleButton IsChecked 。 相关的值将为TrueFalse{x:Null}

HB的答案很好,但有些情况并不是那么好。

如果构建视图(及其基础视图模型)很昂贵,那么每次用户更改视图时,切换Content属性都将支付此费用。

在某些情况下,在同一容器(例如Grid )中创建两个视图并切换其Visibility是有意义的。 如果在视图模型中使用延迟评估,则在视图变得可见之前不会执行昂贵的操作,并且 – 重要的是 – 它们将仅在视图一次可见时执行。 一旦显示了两个视图,用户就可以在视图之间来回切换而无需重建底层视图模型。

编辑:

我有所纠正,有点像:HB的答案并不像它看起来那么好。

您不能使用样式将ContentControlContent属性设置为UIElement 。 有关完整的详细信息,请参阅此博客文章 ,但长期和短期是如果您使用HB的方法,您将收到运行时错误。

您可以设置ContentTemplate属性,例如: