1

我做了什么, 我有 HomeViewModel 和 SellsViewModel。

在 HomeViewModel 中,我有属性“SellID”

在 SellViewModel 的构造函数中,我能够解析 HomeViewModel 的引用并将其存储在 SellViewModel 的 m_objHomeViewModel 变量中

在 SellViewModel 的 XAML 中,我有一个显示“SellID”的文本框,该文本框绑定到“m_objHomeViewModel.SellID”

我正在做什么这样 做,每当用户在 HomeViewModel 上选择差异“Sell”时,我的 SellViewModel 会自动选择它并在 SellView 中显示更改。

问题

  1. 由于 SellView 中的 XAML 文本框绑定到 HomeViewModel 中的属性,因此更改会立即反映在 UI 上

  2. 但是我无法在 SellViewModel 中捕获任何事件(例如属性更改),捕获此类事件我想从数据库中为选定的“SellID”加载其他值。

  3. 我没有使用事件聚合器。如果使用,我可以轻松订阅 HomeViewModel 发布的 SellViewModel 中的事件

Q1:不使用事件聚合器怎么办?

Q2:如果在XAML中TextBox绑定了属性m_objHomeViewModel.SellID,会不会造成内存泄露?

Q3:如果在 HomeViewModel 中,我会引用 SellViewModel(使用 container.resolve)并在 HomeViewModel 中的“SellID”属性被修改时调用 SellViewModel 的公共属性或方法。这是一个好的编程习惯吗?在这里我认为它会在 HomeViewModel 和 SellViewModel 之间创建紧密耦合

请就此提出建议...

问候

4

1 回答 1

0

A1:如果我理解您的设计,您的 SellVM 将需要手动订阅 HomeVM 的 PropertyChanged 事件。如果 HomeVM 的 SellId 属性引发 PropertyChanged,那么您的 SellVM 将看到并做出相应的响应。

A2:在没有看到整个应用程序的情况下,简单地对属性进行数据绑定不会导致内存泄漏。只要显示 UI,HomeVM 就会在内存中,但 .NET 可以很好地识别何时不再需要它并清理内存。这个问题的答案在很大程度上取决于您的整体设计,但是通过 SellVM 从 HomeVM 绑定 SellID 的简单行为本身不会导致内存泄漏。

A3:这听起来有点奇怪——在不了解完整架构的情况下,似乎 SellID 应该属于 SellVM,而当用户切换 SellID 时,HomeVM 会使用适当的 SellID 加载 SellVM。这似乎更 OO,并允许您分离关注点。这样,关于“Sell”(销售?)的所有内容都封装在 SellVM 中,HomeVM 严格负责协调(加载正确的子 VM)。但这是基于我能收集到的关于你的整体设计的一点信息。

于 2012-07-29T15:23:56.473 回答