Silverlight 是否为类/结构的所有成员引发INotifyPropertyChanged?
所以我有一个这样的项目Silverlight 是否为类/结构的所有成员引发INotifyPropertyChanged?,silverlight,mvvm,mvvm-light,Silverlight,Mvvm,Mvvm Light,所以我有一个这样的项目 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;
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字段绑定到Subperty,那么如果类的任何成员发生更改,绑定不会更新,只有当整个对象发生更改时,我认为这是故意的
我怎样才能避免这个问题,这样如果我对包含的数据类的成员做了任何事情,我的绑定就会正确更新
我看到的第一件事是将子类的每个元素包装到父类的属性中,如下所示:
public var Data
{
get { return thing.Data; }
set { thing.Data = value; RaisePropertyChanged(DataProperyName);}
}
这是可行的,但是当初始化子类对象时,我仍然有一个问题。我能看到的唯一解决方案是在初始化类时为每个元素手动调用RaisedPropertyName()。这似乎不是一个理想的方法。我希望有更好的办法。谢谢。在大多数情况下,调用
RaisePropertyChanged(null)
(假设这最终调用了对适当的INotifyPropertyChanged事件委托的调用,并将null作为args结构中的属性名称参数),将通知所有绑定的侦听器刷新。如果您绑定到DataClass的属性,如果希望刷新绑定(这是使用绑定的最终目标),则意味着您的数据类必须实现INotifyPropertyChanged(其目的正是为了实现INotifyPropertyChanged)
如果出于“层”原因(例如:不希望数据类实现与视图相关的关注点),不希望DataClass实现INotifyPropertyChanged,则DataViewModel必须充当所需每个属性的传递。这是您提出的第二个解决方案。Nice avatar(提醒我其他人的):)谢谢,我不知道INotifyPropertyChanged会这样工作。@Brandorf,这不能保证,因为不是所有的侦听器都能正确解释空值。它肯定可以在WPF上下文中使用DependencyProperty绑定,但是其他客户端可能订阅NotifyPropertyChanged,并且无法正确处理null。