2011-01-13 16 views
2

所以我有一个项目,建立这样为类/结构的所有成员提高INotifyPropertyChanged?

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);} 
    } 
} 

因此,这里是我的问题:如果我绑定到通过我的模型视图类的事领域的子属性,绑定不如有的更新只有整个对象发生了变化,我相信这是有意的。

如何解决此问题,以便如果我对包含的Dataclass的成员执行任何操作,我的绑定更新是否正确?

我会看着是在子类中的每一个元素包装成父类的属性,像这样的第一件事:

public var Data 
{ 
    get { return thing.Data; } 
    set { thing.Data = value; RaisePropertyChanged(DataProperyName);} 
} 

这工作,但我仍然有一个问题,当子类对象被初始化。我能看到的唯一解决方案是在初始化类时为每个元素手动调用RaisedPropertyName()。这似乎不是最佳的方式来做到这一点。我希望能有更好的方法。谢谢。

+0

尼斯头像(提醒我别人的):) –

回答

3

如果您绑定到DataClass的属性,并希望刷新绑定(这最终是使用绑定的目标),那么这意味着您的DataClass必须实现INotifyPropertyChanged(其目的正是如此)。

如果你不想让DataClass实现INotifyPropertyChanged,对于“图层”的原因(例如:你不希望你的Data类实现与Views相关的问题),那么你的DataViewModel必须作为一个pass-through每个属性,你需要。这是您提出的第二个解决方案。

4

在大多数情况下,调用RaisePropertyChanged(null)(假设这最终会调用适当的INotifyPropertyChanged事件委托,并在args结构中使用null作为属性名称参数)会告诉所有绑定的侦听器刷新。

+0

谢谢你,我不知道INotifyPropertyChanged会像这样工作。 – Brandorf

+0

@Brandorf,不能保证,因为不是所有的听众都会正确地解释null。它肯定与WPF上下文中的DependencyProperty绑定一起工作,但其他客户端可能会订阅NotifyPropertyChanged并且不能正确处理null。 –