所以我有一个像这样设置的项目
Class Dataclass
{
var data
var data;
var data;
}
class DataViewModel
{
private Dataclass thing;
public string thingPropertyName = "thing";
public Dataclass Thing
{
get { return thing; }
set { thing = value; RaisedPropertyChanged(thingPropertyName);}
}
}
所以这是我的问题:如果我通过ModelView类中的Thing字段绑定到子属性,如果类的任何成员发生更改,绑定就不会更新,只有当整个对象发生更改时,我相信是故意的。
如何解决这个问题,以便如果我对所包含的Dataclass的成员做了什么,我的绑定会正确更新?
我要看的第一件事是将子类的每个元素都包装到父类的属性中,如下所示:
public var Data
{
get { return thing.Data; }
set { thing.Data = value; RaisePropertyChanged(DataProperyName);}
}
这很有效,但是在初始化子类对象时仍然存在问题。我能看到的唯一解决方案是在初始化类时为每个元素手动调用RaisedPropertyName()。这似乎不是最佳的方式。我希望有更好的方法。感谢。
答案 0 :(得分:4)
在大多数情况下,调用RaisePropertyChanged(null)
(假设这最终调用相应的INotifyPropertyChanged事件委托调用null作为args结构中的属性名参数)将告诉所有绑定的侦听器刷新。
答案 1 :(得分:3)
如果您绑定到DataClass的属性,并希望刷新绑定(这最终是使用绑定的目标),那么这意味着您的DataClass必须实现INotifyPropertyChanged(其目的正是如此)。
如果您不希望DataClass实现INotifyPropertyChanged,则出于“图层”原因(例如:您不希望您的Data类实现与Views相关的问题),那么您的DataViewModel必须作为每个的传递你需要的财产。这是您提出的第二个解决方案。