WPF - MVVM 屏幕管理

2023-12-30

想象一下您有一个复杂的数据对象。它足够复杂,以至于要编辑对象的各种属性,用户最好拥有多个屏幕。它本质上是一个配置项目的购物车。

因此,一个屏幕就可以让您添加项目。 另一种方法允许您对这些项目进行修改,即预先确定的更改,这些更改会产生相关成本。 第三个屏幕允许您配置项目的全局设置。

我相信您可以猜到,每个屏幕都在完全相同的购物车上运行,只是改变了内部物品的不同属性和关系。

因此,我们将尝试使用 MVVM 编写应用程序,在讨论各种屏幕(以及它们之间的导航)时,我们得出以下问题:

人们在使用 MVVM 时通常如何管理应用程序状态?用户用来切换屏幕的导航栏将存在于屏幕之外,但是当用户单击它时,人们使用哪些常见方式来隐藏一个并显示另一个?

更一般地说,人们如何处理全局应用程序状态?用户一次只能操作一辆购物车,一次只能有一个用户登录,一次只能显示一个屏幕。最好创建一个存储这些重要属性的单例,并且 ViewModel 可以保留它们的副本并通过事件聚合器订阅更改吗?

正如你所知,我什至不知道从哪里开始解决这个问题,所以任何建议都受到欢迎和赞赏。


我会使用 ViewModel 来跟踪应用程序状态。

一个 ViewModel 控制整个应用程序,并处理用户当前所在的页面。应用程序本身绑定到主 ViewModel,并且应用程序屏幕空间的大部分是绑定到 ViewModel.CurrentPage 的 ContentControl。然后使用 DataTemplates 确定为用户当前所在的任何页面显示哪个视图

过去,我对某些对象(例如当前用户)使用了全局单例,并且 ViewModel 在需要时使用对此的引用。因此,如果我想在页面上显示用户名,我会在 ViewModel 中有一个名为 UserName 的属性,它会返回Global.Instance.CurrentUser.UserName

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

WPF - MVVM 屏幕管理 的相关文章

  • WPF - 将窗口置于前面

    我有一个 WPF 窗口 我没有关闭它 相反 我执行 Hide 和 Show 它 现在 当我双击记录上网格中的主窗口时 这将触发 Show 窗口 该窗口将始终显示在主窗口后面 我尝试过以下方法 但没有成功 view Show view Act
  • 如何正确使用Dispatcher.BeginInvoke?

    我几乎在互联网上到处搜索 我用谷歌搜索了很多次并找到了很多结果 但我仍然找不到解决我的问题的方法 我正忙着改造旧的WinForms应用程序到新的 WPF 应用程序 但我在使用某些命令时遇到问题 在他们使用的 Winforms 应用程序中Co
  • WPF 中的数据绑定?

    我正在尝试在 WPF 中设置数据绑定 我有班级人员 它通过一个文本框进行更新 类似老式的 另一个文本框应该通过数据绑定镜像对人员对象的更改 它曾经是 type twoway 但抛出了xamlparse 异常 它不是这样工作的 点击显示 pe
  • WPF WebBrowser (3.5 SP1) 始终位于顶部 - 在 WPF 中显示 HTML 的其他建议

    我一直在拼命寻找一种在 WPF 应用程序中显示 HTML 的简单方法 有一些选项 1 使用WPF Web浏览器控件2 使用帧控制3 使用第三方控件 但是 我遇到了以下问题 1 WPF WebBrowser Control不是真正的WPF 它
  • WPF - 在样式中使用 ControlTemplate 资源

    创建样式时 是否可以将 ControlTemplate 属性设置为先前定义的资源 例如 如果我在 ResourceDictionary 中有以下内容
  • 从模板绑定到 viewmodel 的属性

    我为我的 GameViewModel 创建了一个视图 我有一些像这样的xaml
  • 传递给命令 WPF 的多个参数[重复]

    这个问题在这里已经有答案了 我有以下层次结构 abstract class TicketBase public DateTime PublishedDate get set class TicketTypeA TicketBase publ
  • C#/WPF:禁用 RichTextBox 的文本换行

    有谁知道如何禁用文本换行RichTextBox 例如 如果我有一个大字符串不适合窗口 RichTextBox将字符串中无法显示的部分放在新行中 我想禁用它 并使其仅通过使用Scrollbar 多谢 Cheers A RichTextBox
  • 如何循环访问 WPF StackPanel 静态项目?

    可能很容易 但我很难弄清楚这一点 谷歌似乎也没有多大帮助 如何循环遍历 StackPanel 的静态声明元素 无数据绑定 元素在 xaml 中声明 任何帮助表示赞赏 你的意思是StackPanel的孩子们 foreach var child
  • WPF;单击 ListView 中的空白区域时如何取消选择所有选定的项目

    当我有几个 甚至一个 selected items我按简单click在我的空白处ListView 空白 非行 我想取消选择所有选定的项目 这是我取消选择所有项目的功能 private void DeselectAllListViewItem
  • 带有 ObservableCollection 和动态过滤器的 Silverlight ListBox

    假设我有这门课 public class MyData public bool IsActive get set public String Data1 get set public String Data2 get set and an
  • 如何在MVVM中实现对话框架构

    我正在开发一个基于 PRISM 框架 Unity Container 的 WPF 4 0 MVVM 应用程序 我想知道在 mvvm 模式中实现对话框的最佳方法是什么 我计划在我的应用程序中使用相当多的东西 所以我想要一些可重用的东西 由于您
  • 如何在 WPF 中实现虚线或点线边框?

    我有一个ListViewItem我正在申请Style到 我想把灰色虚线作为底部Border 我怎样才能在 WPF 中做到这一点 我只能看到纯色画笔 这在我们的应用程序中效果很好 允许我们使用真正的边框而不是乱用矩形
  • WPF DataGrid 绑定 DataGridCell 内容

    希望这将是一个非常简单的答案 我认为我只是没有看到众所周知的树木 我有一个 DataGridCell 样式 我想将单元格的内容绑定到图像的源属性 这是我目前使用的 XAML
  • 比较运算符性能 <= 与 !=

    让我们首先声明代码可读性胜过微优化 我们应该将其留给编译器 这只是一个奇怪的案例 具体细节似乎与一般建议相比很有趣 因此 我在搞素数生成器函数 并提出了一种奇怪的行为 其中 人们建议效率最高 实际上效率最低 而 C private stat
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • Silverlight MVVM 绑定更新按不期望的顺序触发

    Scenario 在 Silverlight 4 MVVM 项目中 我们有一个ListBox控件包含项目 所选项目以双向方式绑定到 ViewModel 中的相应属性 另一个控件 出于某种原因 我将其精简为一个TextBox 是绑定到所选项目
  • Wpf TextBlock 中的垂直文本

    是否可以垂直显示 TextBlock 中的文本 以便所有字母彼此堆叠 不使用 LayoutTransform 旋转 还没有人提到使用纯 XAML 垂直堆叠任意字符串的字母 不旋转它们 的明显而简单的方法
  • 混合 MFC 和 WPF:模态对话框

    我使用 C CLI 界面层将 C WPF 对话框添加到现有的 C MFC 应用程序 我一切正常 只是我遇到了形式问题 例如 MFC 应用程序使用 ShowDialog 显示 WPF 对话框 按预期工作 该 WPF 对话框显示使用 DoMod
  • Web 客户端和 Expect100Continue

    使用 WebClient C NET 时设置 Expect100Continue 的最佳方法是什么 我有下面的代码 我仍然在标题中看到 100 continue 愚蠢的 apache 仍然抱怨 505 错误 string url http

随机推荐

  • Angular-ui 选项卡在选项卡内容中加载模板

    我正在使用以下控制器使用 angular ui 中的选项卡 scope panes title Home content home active true title Settings content settings title View
  • 如何在 Bash 中获取当前可用磁盘空间?

    我正在运行一些操作 这些操作不断消耗我的磁盘空间 因此 我希望我的计算机在磁盘空间低于 2GB 时发出声音 我知道我可以通过运行获得列出可用磁盘空间的输出df h Filesystem Size Used Avail Capacity iu
  • 为什么 perf stat 将“stalled-cycles-backend”显示为<不支持>?

    Running perf stat ls显示这个 Performance counter stats for ls 1 388670 task clock 0 067 CPUs utilized 2 context switches 0 0
  • gcc静态库链接与动态链接

    我的构建环境是CentOS 5 我有一个名为 libcunit 的第三方库 我用 autotools 安装了它 它生成了两个libcunit a and libcunit so 我有自己的应用程序 它与一堆共享库链接 libcunit a位
  • 错误:“未提供名称属性”- 用于 log4j2.properties 自定义

    我正在自定义 log4j2 properties 以在所需位置生成日志文件 这样做时我收到以下错误 我的 log4j2 properties 文件 status debug name properties configuration Giv
  • CSS 伪类后备?

    我想使用tr nth child even odd 表的伪类 但我也想支持 IE 2 群体 那么 有没有纯CSS的方式来添加边框tr if nth child不支持 你可以试试选择性 http selectivizr com 我认为这是最简
  • 类模板构造函数重载解决歧义

    我正在编写一个像 stl 矢量这样的类模板 两个构造函数如下所示 template
  • 在 Python 中访问 R 用户定义的函数

    因此 我需要通过交叉验证进行原理组件回归 但我在 Python 中找不到可以执行此操作的包 我编写了自己的 PCR 类 但是当针对 R 的 pls 包进行测试时 它的性能明显更差 并且在高维数据 50000 个特征 上速度慢得多 我仍然不确
  • 如何强制 Hibernate 返回空值而不是 null?

    我正在使用 Oracle 11GR2 当 varchar2 字段为空时 执行System out println空白字段上将显示null在我的 Eclipse 控制台上 我怎样才能让它显示空字符串 在 getter 中使用这个技巧很好 但它
  • SameSite None 未在 Azure Web App 中设置 cookie 属性

    为了准备 Chrome 80 中 SameSite 即将发生的更改 我已将 NET Framework API 从4 6 2 to 4 7 2 我创建了一个简单的测试端点 只需设置一个 cookieSameSite None public
  • 强制下载 iOS 5.0.1 符号

    一位客户向我发送了 iOS 5 0 1 9A405 设备的崩溃日志 我在 Snow Leopard 上运行 Xcode 4 2 崩溃日志调用堆栈的系统部分无法符号化 并且它们似乎与崩溃相关 Xcode 中没有 iOS 5 0 1 符号 我没
  • WIX - 对安装取消运行自定义操作

    我正在使用 WIX 编写安装程序 当用户按下 取消 按钮时 我需要执行自定义操作 我创建了一个自定义操作 但我似乎找不到在哪里使用该操作 有什么想法我该怎么做吗 尝试类似的方法
  • 导航栏随着 CSS 动画消失

    我正在使用 Animate css 库中的 CSS3 动画 它们真的很棒 当我将它们与 WOW js 结合起来时 它们工作得非常完美 但是 当我向下滚动页面并且动画进入屏幕时 屏幕顶部的固定导航栏会消失几秒钟 动画显示的时间 然后返回屏幕
  • 适用于 Android 和 iOS 的应用程序 OpenStreetMap [已关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想使用 OpenStreetMap 制作一个移动本机应用程序 Android 和 iOS 我需要离线
  • Swift 中的惰性属性相当于 Objective C 中的惰性 Init getter

    Swift 中的惰性属性是否相当于用 Objective C 中的惰性加载模式覆盖 getter 来自文档 惰性存储属性是指直到第一次使用时才计算其初始值的属性 您可以通过在声明之前写入惰性属性来指示惰性存储属性 所以 大多数情况下 是的
  • 位图图像未显示在 imageview 中

    我创建了一个应用程序 在其中允许用户从图库中选择图像或从相机拍摄照片并将该图像上传到网络服务器 此代码工作正常 现在在其他屏幕中 我正在从网络服务器下载图像并存储该图像在 SD 卡中 问题是 如果从图库中选择图像 则图像将显示在图像视图中
  • ANTLR:自定义语法示例的词法错误帮助

    什么方法可以让我最大限度地报告词法错误 举一个简单的例子 我想为以下文本编写语法 为了简单起见 空格被忽略 字符串常量中不能有 myvariable 2 myvariable hello world Group myvariablegrou
  • 使用 window 作为原型在 javascript 中返回看似错误的值

    您希望此代码返回 123 但它返回的是窗口对象 function W this window 123 W prototype window new W window window object not 123 请检查后续问题 window
  • ElasticSearch 中过滤的嵌套inner_hits 查询的聚合

    我刚接触 ElasticSearch 几天 作为一项学习练习 我实现了一个基本的职位抓取工具 它聚合来自几个职位列表网站的职位 并用一些数据填充索引供我使用 我的索引包含每个列出职位的网站的文档 每个文档的属性都是一个 jobs 数组 其中
  • WPF - MVVM 屏幕管理

    想象一下您有一个复杂的数据对象 它足够复杂 以至于要编辑对象的各种属性 用户最好拥有多个屏幕 它本质上是一个配置项目的购物车 因此 一个屏幕就可以让您添加项目 另一种方法允许您对这些项目进行修改 即预先确定的更改 这些更改会产生相关成本 第