如何使用 DataTemplate + 触发器在视图之间切换

2023-12-01

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

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

如何基于触发器将视图应用到我的视图模型。


如果要显示的视图的状态保存在某个枚举属性中,您可以使用ContentControl and 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相反,因为否则只有一个视图实例被所有控件共享,其样式是 WPF 不允许的(当然Content需要设置为某物用于要应用的模板))

您也可以直接绑定IsChecked of the ToggleButton using ElementName当然。相关值将是True, False and {x:Null}.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 DataTemplate + 触发器在视图之间切换 的相关文章

  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • 为什么 GCC 不允许我创建“内联静态 std::stringstream”?

    我将直接前往 MCVE include
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么

随机推荐

  • 将 SVG 过滤器内联为数据 URI

    我尝试使用 CSS 中的数据 URI 添加 SVG 过滤器 但无法将效果应用到我的图像 似乎应该支持它 因为根据 caniuse 所有主要浏览器都支持数据 URI 和 SVG 过滤器 如果我将其保存为 SVG 文件并链接到 css 中的文件
  • 如何在 Android 上的 WebRTC 通话期间将麦克风录制为更压缩的格式?

    我有一个应用程序调用使用WebRTC 但在通话过程中 我需要录制麦克风 WebRTC有一个对象WebRTCAudioRecord录制音频但音频文件太大 PCM 16bit 我想录制但尺寸较小 我试过了MediaRecorder但这不起作用
  • 如何修复 OCaml 中的代码错误?

    我是 OCaml 新手 刚刚找到了在线 OCaml 指南 http try ocamlpro com 到了第五课 我陷入了一些练习中 所以 问题来了 修复所有这些 let 表达式 以便最终获得预期结果 1 let xy let x x an
  • 具有范围的子数组

    我试图将一个对象数组拆分为包含 32 个对象的较小数组 剩下的大约最后放入数组中 这是我正在使用的代码 int a sharedManager inventoryArray2 count float b a 33 int c ceilf b
  • BeginRequest 在 ASP.NET MVC 应用程序中触发静态文件

    我的印象是静态文件 CSS 图像 font face 文件等 完全绕过 ASP NET 并直接由 IIS 提供服务 但是 每个 HTTP 请求都会调用我的 BeginRequest 事件处理程序 包括静态文件的请求 这让我担心 因为我正在创
  • 如何使旧版扩展 (tfs 2013) 在 tfs 2015 update 2 中工作?

    我们让这个扩展在 tfs 2013 下工作 它只是隐藏了积压项目的快速添加面板 请参见下面的代码 我们将服务器更新到 tfs 2015 2 后 代码停止工作 无法使用 VSTS 扩展的新框架 请参阅上一个问题 这是 JavaScript 代
  • 使用包含浮点数组的 OpenCL 将结构传递到 GPU

    我目前有一些数据想要传递到我的 GPU 并将其乘以 2 我创建了一个结构 可以在这里看到 struct GPUPatternData cl int nInput nOutput patternCount offest cl float pa
  • 当类包含在另一个类中时,为什么不转发类工作的声明

    这编译 include Sprite h class GameObject public int x y w h Sprite sprite public GameObject GameObject int x int y int w in
  • 我可以使用 VC++ 2008 创建 Dll 并在 VC++ 6 中使用它吗?

    我用 VC 2008 制作了一个 DLL 当我在控制台应用程序 VC 6 0 中使用它时 出现异常 msvcr90 dll 0xc0000005 访问冲突 Access Violation在这种情况下可以意味着很多事情 并且msvcr90
  • 后台服务之间如何通信

    我正在实现一个应用程序 因为我有两个服务 一个服务执行某些任务并将某些值传递给另一个服务 然后该服务使用该值执行某些任务 当第一个服务生成第一个值时 它应该启动第二个服务 此后 第一个服务生成的值将添加到第二个服务的队列中 第一次当第二个服
  • 从 C# 调用 VBA 函数

    是否可以调用一个 VBA 函数 在 Access 中 该函数从外部世界获取两个字符串参数 例如从 c 中 但其他函数也可以这样做 这是从 C 调用 Access 数据库函数的示例 我过去曾使用该函数来创建类似的功能 private void
  • HTTP 保持活动状态和 ServiceHost / C#?

    如何使用应用程序配置和 C ServiceHost 启用 禁用 HTTP Keep alive 并设置自托管服务的连接超时 例如 MyService service new MyService ServiceHost serviceHost
  • 未定义的变量:GPVAL_DATA_Y_MIN(Gnuplot)

    基于这篇文章 我正在使用 gnuplot gnuplot 4 6 patchlevel 1 gnuplot 范围内的最大值和最小值 我正在尝试使用set yr GPVAL DATA Y MIN GPVAL DATA Y MAX 在我的 pg
  • 是什么导致 Winforms 默默地丢弃未处理的异常(没有 try/Catches)?

    我正在向我的 winforms 控件添加新功能 其中一部分要求曾经始终使用的变量现在是可选的 如果它为空 则从第二个源获取数据 我做了一些更改并运行了我的表单 却发现什么也没有发生 甚至以前有效的功能也没有发生 我很困惑地浏览了代码 发现我
  • 用于查找 C# 类和方法名称的正则表达式

    我正在编写一个影响分析工具 它将解析一堆选定的文件类型并查找文件 在本例中为 cs 文件 内的类和方法调用 我已经成功编写了一个正则表达式 可以查找一行代码是否是方法调用 Regex re new Regex b public privat
  • 为什么Java中对象的Hashcode会改变?

    为什么Java中对象的Hashcode会改变 它有什么变化吗 它与哈希表有什么关系 每个对象都应该有它唯一的哈希码 那么 重新哈希是其原因吗 提前致谢 The defaulthashcode的实现相当于对象标识 但是 某些对象会覆盖哈希码
  • 将图像叠加到相机预览 SurfaceView 上

    我有一个SurfaceView它被用来绘制图像 我想将它们叠加到手机相机的实时反馈上 目前 SurfaceView包含图像的图像具有白色背景 但如果我要将它们覆盖到手机的相机画面上 它们必须是透明的 相机和动画绘制不能同时完成Surface
  • Xamarin iOS IPv6 应用商店拒绝

    我们一直在构建一个关于客户端 服务器应用程序的 iOS 应用程序 我们在 iOS 应用程序中通过 Xamarin 使用 SQL 连接和 WCF Web 服务 SQL连接代码 String ips 10 0 0 1 Example SqlCo
  • 连接 SQLite 数据库失败

    我正在尝试在 Java Applet 中访问我的 SQLite3 数据库 当我运行代码来连接到数据库时 出现此错误没有找到适合 a db 的驱动程序 我该如何修复它 现在我不完全确定我实际上已经安装了正确的驱动程序 我会告诉你我做了什么 你
  • 如何使用 DataTemplate + 触发器在视图之间切换

    我有一个要求 其中用户可以切换以树或数据网格中的文本或流程图的形式查看分层数据 用户可以通过单击切换按钮来完成此操作 该按钮显示 切换模式 我希望以这样一种方式来完成这一切 即它只能在视图中处理 因为所有三种情况下的 ViewModel 都