我有一个要求,用户可以在其中切换以树或数据网格中的文本或流程图的形式查看分层数据。
用户可以通过单击一个显示为:切换模式的切换按钮来执行此操作。我想以这样一种方式完成所有这一切,即它只能在 View 中处理,因为在所有三种情况下,ViewModel 都是相同的。
我如何根据触发器将 View 应用到我的 ViewModel。
最佳答案
如果要显示的 View 的状态保存在某些枚举属性中,您可以使用 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>
(因为样式只在一个地方使用,直接将它设置为ContentControl.Style
就可以了,如果你想在多个地方使用它,你应该设置ContentTemplate
而不是,因为否则将只有一个 View 实例由所有控件共享,其样式是 WPF 不允许的(当然 Content
需要设置为 something 用于要应用的模板))
您还可以使用 ElementName
直接绑定(bind)到 ToggleButton
的 IsChecked
当然。相关值将是 True
、False
和 {x:Null}
。
关于c# - 如何使用 DataTemplate + 触发器在 View 之间切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6546436/