【问题标题】:ViewModel or ValueConverter for WPF ViewWPF 视图的 ViewModel 或 ValueConverter
【发布时间】:2016-07-18 16:08:54
【问题描述】:

我有一个 WPF 应用程序来显示来自串行流的传入字节。我想在允许更改的用户控件中显示这些字节(即字节值更改意味着背景颜色更改以提醒用户,用户选择以十六进制/十进制/二进制查看数据)。到目前为止,我有一个

ObservableCollection<ByteDisplay>

其中ByteDisplay 是一个 WPF 用户控件,它绑定到具有一些相关属性的数据模型:DisplayFormat(枚举 Hex/Binary/Decimal)、Data(实际字节值)和 BgColor(表示系统颜色的字符串,表示值已更改)。

我的问题是我必须完全替换 ByteDisplay 的 DataContext 才能在包含此集合的聚合视图中显示更改。我想我可以使用 ValueConverter 来收集原始字节来解决这个问题,而不是完成聚合视图的 ViewModel 中的更改,但这是正确的方法吗?

【问题讨论】:

  • 不要创建 UI 元素的 observable 集合,你应该严格分离数据和视图组件。

标签: c# wpf


【解决方案1】:

为什么要使用 ObservableCollection?不过听起来真的很奇怪。

在我看来,您可以按照 MVVM 模式简单地创建绑定到视图模型的用户控件。

在这里,您可以拥有绑定到视图模型中的属性的文本块、文本框、数据网格、图表等。您还可以将背景属性绑定到 viewmodel 或使用转换器,如您所说。就像如果你有一些其他属性引用它,假设你在文本框中显示一些值,并且你使用相同的值来更改背景颜色以警告用户,然后使用转换器。

就这么简单。我仍然不明白创建 ObservableCollection 背后的逻辑。

【讨论】:

  • ObservableCollection 允许字节数组随着相应的视图更改而增长和缩小,而无需我进行管理。
  • 但是你确定它对性能或内存管理没有任何影响吗?
  • 如果有影响,可以忽略不计。我担心的是让图书馆在可能的情况下为我完成工作。
  • 为什么不试试 MVVM 方法?
  • 我想这真的是我的误解。我认为这是一种 MVVM 方法。你能告诉我我在哪里失败了吗?我有三合会,但这个特定的视图实际上是较小视图的集合。你能用代码示例编辑你的答案吗?
猜你喜欢
  • 1970-01-01
  • 2010-12-01
  • 1970-01-01
  • 2010-10-11
  • 2011-10-15
  • 1970-01-01
  • 2011-09-17
  • 1970-01-01
  • 2012-05-28
相关资源
最近更新 更多