Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight 是否为类/结构的所有成员引发INotifyPropertyChanged?_Silverlight_Mvvm_Mvvm Light - Fatal编程技术网

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。