【问题标题】:WPF MVVM: Decouple view bindings and dynamically setting bindingsWPF MVVM:解耦视图绑定和动态设置绑定
【发布时间】:2013-10-12 06:40:56
【问题描述】:

我正在编写一个相当大的 WPF 应用程序,它遵循 MVVM 结构。我想以两种模式运行我的 UI。第一个是正常的日常操作模式。第二个是我一直想知道的...我希望能够在“配置”模式下运行它,在这种模式下,用户将看到 UI 的方式或多或少与正常方式相同模式,除了当他们将鼠标悬停在(或单击)控件时会出现一个弹出窗口。此弹出窗口将允许用户更改与该控件相关的某些绑定。我不想公开每个属性(或每个控件)。

例如: 有一个与压力信号绑定的 TextBlock,现在用户想要将此绑定更改为温度信号。他们可以在配置模式下启动 UI,使用 TextBlock 导航到屏幕,选择它,然后在弹出窗口中查看 Text 属性,然后他们可以将其更改为新的临时信号。这是一个简化的示例,但基本上是我想要做的。

这可能吗?请记住,UI 必须写入视图 (XAML)。任何帮助表示赞赏。

附: 这将是一个非常有用但很少使用的功能。也许有 2 个项目使用相同的 View 但不同的 ViewModel 和 Model 是可以的……至少我一直认为这可能是需要的。即使在使用配置模式 UI 后必须重新编译正常模式 UI。

【问题讨论】:

  • 在 ViewModel 级别处理此问题,而不是为此尝试破解 UI。您需要抽象您的视图并创建这些“小部件”的模型表示。 UI 不能持久化(例如,在数据库中)。所以你需要别的东西。
  • 你是说你想改变绑定,让它永久绑定到别的东西上?
  • 否则,将您的 XAML 文件与应用程序一起部署(而不是编译到)并在运行时使用 XamlReader.Load() 或其他内容加载它们,然后您可以修改 XAML 文件(在磁盘上)。

标签: wpf mvvm


【解决方案1】:

每个弹出窗口都应该有自己的虚拟机(或者如果由于每个弹出窗口的属性数量很少而导致过度杀伤,他们可以共享)并通过消息总线与主虚拟机通信。

将您的绑定存储为用户设置,当消息从弹出窗口 VM 到达时,将新绑定作为负载,主 VM 将获取该负载并通过简单地调用 Settings.Default.Save(); 保存适当的用户设置

根据您的描述,没有理由让它比 IMO 更复杂......

【讨论】:

    猜你喜欢
    • 2011-01-23
    • 2011-10-07
    • 1970-01-01
    • 2013-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多