如何使用DataTemplate + Triggers在视图之间切换
我有一个要求,即用户可以切换到以树或数据网格或FlowChart中的文本的forms查看分层数据。
用户可以通过单击切换按钮来执行此操作,切换按钮说明:切换模式。 我希望以这样的方式完成所有这些,只有在ViewModel的所有三种情况下都可以在View中处理它。
如何根据Trigger将View应用于我的ViewModel。
如果要显示的视图的状态保存在某个枚举属性中,则可以使用ContentControl
和DataTriggers
,例如:
(因为样式只在一个地方使用,通过将其直接设置为ContentControl.Style
这将起作用,如果你想在多个地方使用它,你应该设置ContentTemplate
,因为否则只会有一个视图实例所有控件都使用WPF不允许的样式共享(当然Content
需要设置为要应用的模板的内容))
您也可以使用ElementName
直接绑定到ToggleButton
IsChecked
。 相关的值将为True
, False
和{x:Null}
。
HB的答案很好,但有些情况并不是那么好。
如果构建视图(及其基础视图模型)很昂贵,那么每次用户更改视图时,切换Content
属性都将支付此费用。
在某些情况下,在同一容器(例如Grid
)中创建两个视图并切换其Visibility
是有意义的。 如果在视图模型中使用延迟评估,则在视图变得可见之前不会执行昂贵的操作,并且 – 重要的是 – 它们将仅在视图第一次可见时执行。 一旦显示了两个视图,用户就可以在视图之间来回切换而无需重建底层视图模型。
编辑:
我有所纠正,有点像:HB的答案并不像它看起来那么好。
您不能使用样式将ContentControl
的Content
属性设置为UIElement
。 有关完整的详细信息,请参阅此博客文章 ,但长期和短期是如果您使用HB的方法,您将收到运行时错误。
您可以设置ContentTemplate
属性,例如: