【发布时间】:2013-04-01 00:53:28
【问题描述】:
我对 MVVM 设计有一个大问题。我试图在我的 ViewModel 中捕获我的内部嵌套对象的每个 PropertyChanged,包括它们嵌套对象的进一步属性更改,但我不知道该怎么做。
这是我的结构:
class MyVM
{
public MyVM()
{
this.SomeData = new SomeData();
this.SomeData.NestedObj = new MyNestedDat();
this.SomeData.Str = "This tiggers propertychanged inside MyDat class";
// this triggers propertychanged event inside MyNestedDat class
this.SomeData.NestedObj.Num = 123;
}
// and here should be a method where i catch all possibe propertychanges from my nested objets and their nested objets, how do i do that?
public MyDat SomeData
{
get;
set;
}
}
class MyDat : INotifyPropertyChanged
{
private string str;
public string Str;
{
get { return this.str;}
set
{
this.str = value;
this.PropertyChanged(this, "Str");
}
}
publicMyNestedDat NestedObj
{
get;
set;
}
}
class MyNestedDat : INotifyPropertyChanged
{
private int num;
public int Num
{
get{ return this.num;}
set
{
this.num = value;
this.PropertyChanged(this, "Num");
}
}
}
我如何让它工作?我真的不知道从哪里开始。
MyNestedDat 类抛出 PropertyChanged,MyDat 类抛出 propertychanged,我想在我的视图模型中捕获它们。我该怎么做?
【问题讨论】:
-
您可以通过订阅
PropertyChanged事件来做到这一点 -
是的,但如果我有一个复杂的结构,所有的添加事件处理程序和删除事件处理程序都会变得混乱,有没有一种干净的方法可以做到这一点?
-
你为什么要这样做?永远不要遇到需要这样做的情况。
-
像“a.b.c.d = 123”这样的结构是一种反模式,几乎总是表明存在设计问题。如果你修复它,你可能也找到了这个问题的解决方案。
-
您将受益于使用消息总线/事件聚合在视图模型之间使用更松散耦合的通信。