我做了什么我有HomeViewModel和SellsViewModel。
在HomeViewModel中,我有属性"SellID"
在SellViewModel的构造函数中,我能够解析HomeViewModel的引用,并将其存储在SellView Model 中的m_objHomeViewModel变量中
在SellViewModel的XAML中,我有一个显示"SellID"的文本框,该文本框绑定到"m_objHomeViewModel.SelID"
我这样做的结果这样,每当用户在HomeViewModel上选择差异"Sell"时,我的SellViewModel就会自动拾取它,并在SellView中显示更改。
问题
-
由于SellView中的XAML文本框绑定到HomeViewModel中的属性,因此更改会立即反映在UI 上
-
但我无法在SellViewModel中捕捉到任何事件(如属性更改),捕捉到这样的事件时,我想从数据库中为选定的"SellID"加载其他值。
-
我没有使用Event Agreemgator。如果使用,我可以很容易地订阅HomeViewModel 发布的SellViewModel中的事件
Q1:如何在不使用Event Agreemgator的情况下做到这一点?
Q2:如果在XAML中,TextBox绑定到属性m_objHomeViewModel.SellID,它会造成内存泄漏吗?
Q3:如果在HomeViewModel中,每当修改HomeViewModel的"SellID"属性时,我都会引用SellViewModel(使用container.resolve)并调用SellViewModel的公共属性或方法。这是一个好的编程实践吗?在这里,我认为它将在HomeViewModel和SellViewModel 之间建立紧密耦合
请对此提出建议。。。
问候
A1:如果我理解您的设计,您的SellVM将需要手动订阅HomeVM的PropertyChanged事件。如果你的HomeVM的SellId属性引发PropertyChanged,那么你的SellVM会看到并做出相应的响应。
A2:在看不到整个应用程序的情况下,简单地将数据绑定到一个属性不会导致内存泄漏。只要显示UI,HomeVM就会在内存中,但.NET在识别何时不再需要它以及清理内存方面做得很好。答案在很大程度上取决于您的整体设计,但通过SellVM从HomeVM绑定SellID的简单操作本身不会导致内存泄漏。
A3:这听起来有点奇怪——在不了解完整架构的情况下,SellID似乎应该属于SellVM,当用户切换SellID时,HomeVM会用适当的SellID加载SellVM。这看起来更OO,并允许您分离关注点。这样,关于"Sell"(sale?)的所有内容都封装在SellVM中,HomeVM严格负责协调(加载正确的子VM)。但这是基于我所能收集到的关于你整体设计的一些信息。