wpf - 在 WPF 中切换 View ,高级设计问题

标签 wpf mvvm

所以我目前正在开发一个用 WPF 编写的 UI。我真正喜欢 WPF 的一件事是它引导您编写更多解耦、隔离的 UI 组件的方式。我在 WPF 中的一个痛点是它会导致您编写更多解耦、隔离的 UI 组件,这些组件有时需要相互通信:)。这可能是由于我相对缺乏 UI 经验,尤其是在 WPF 方面(我不是新手,但我的大部分工作远比 UI 设计低级)。

不管怎样,情况是这样的:

在任何时候,UI 的中心区域都会显示实现为 UserControl 的三个 View 之一,我们称它们为 View A、B 和 C。

用户将在不同时间在这些 View 之间切换,并且切换 View 的方法不止一种(这对客户来说效果很好,但目前在代码设计中会造成一些痛苦)。

现在,每个 View 切换机制都会做自己的事情来转换到另一个 View 。某个单例类负责存储数据并在 View 之间进行通信。我不喜欢这样,它很困惑,容易出错,而且单例类对 UI 的细节了解太多。我想尽可能地消除它。

我今天遇到了一个与 View 切换时间有关的错误。为简单起见,一个 View 在卸载时需要执行一些清理,但该清理会删除另一个 View 所需的一些数据。如果清理运行另一个 View 加载之后,问题就确定了。明白了吗?凌乱。

我试图退后一步,想象一种不同的方式来让这些 View 加载完成工作所需的数据。你们中的一些更有经验的 UI/WPF 人一定遇到过类似的问题。我有几个想法,但我希望有人会在这里向我提出一种更清洁的方法。我不喜欢依赖操作顺序(高级别)来让我的代码正常工作。提前感谢您提供的任何帮助。

最佳答案

我会推荐某种处理 CurrentView 的父 ViewModel。我写了一个例子here如果您有兴趣,请稍后再回来。

基本上,父 View 会有 List<ViewModelBase> AvailablePages , 一个 ViewModelBase CurrentPage , 和 ICommand ChangePageCommand

如何选择显示这些取决于您。我的首选方法是 ContentControl它是 Content绑定(bind)到 CurrentPage , 并使用 DataTemplates确定哪个 View应根据 ViewModel 显示存储在 CurrentPage

关于wpf - 在 WPF 中切换 View ,高级设计问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7265156/

相关文章:

wpf - 显示选定的日历日期

wpf - 如何知道何时完成DataContext?

c# - 如何显示 DataAnnotations 的错误消息

c# - 使用 MVVM 模式的 UI 设计

c# - 使用 wpf mvvm 在同一 View 上的 View 模型之间切换

wpf - 当我提供默认值时,为什么依赖属性实现会使我的应用程序崩溃?

c# - WPF UI 仅在调试时崩溃

c# - Catel - CommandManager 未传递 CommandParameter

c# - 如何处理 View 模型中的 Slider.ValueChanged 事件?

c# - 反序列化 Json 对象 - DateTime