Unity容器视图模型通信

时间:2012-07-29 05:40:41

标签: wpf c#-4.0 unity-container viewmodel

我做了什么 我有HomeViewModel和SellsViewModel。

在HomeViewModel中,我有属性“SellID”

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

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

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

问题

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

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

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

  4. Q1:如何在不使用Event Agreegator的情况下进行操作?

    Q2:如果在XAML中,TextBox绑定到属性m_objHomeViewModel.SellID,是否会造成内存泄漏?

    问题3:如果在HomeViewModel中,我会引用SellViewModel(使用container.resolve)并在HomeViewModel中修改“SellID”属性时调用SellViewModel的公共属性或方法。这是一个很好的编程习惯吗?在这里,我认为它将在HomeViewModel和SellViewModel

    之间创建紧密耦合

    请在此建议...

    此致

1 个答案:

答案 0 :(得分: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)。但这是基于我可以收集的关于你的整体设计的一点点。