如何在不使用INotifyPropertyChanged的情况下更新视图和视图模型

时间:2012-08-27 10:20:04

标签: c# wpf mvvm

当我们在View和View-Model之间有一个双向绑定时,我们实现了具有以下事件的INotifyPropertyChanged接口:

// Summary:
//     Occurs when a property value changes.
event PropertyChangedEventHandler PropertyChanged;

但是如果不实施INotifyPropertyChanged,我可以这样做吗?

4 个答案:

答案 0 :(得分:2)

如果你不能实现INotifyPropertyChanged(INPC)(或者你没有想要绑定的源代码),那么你应该在View Model中包装你想要绑定的内容。视图模型将为绑定实现INPC,并且必须获取/设置数据,可能是其他类。

答案 1 :(得分:1)

如果您想避免明确地实现INotifyPropertyChanged,可以使用像PostSharp这样的代码编织工具。然后,实现INotifyPropertyChanged就像

一样简单
[NotifyPropertyChanged]
public class Shape
{
    public double X { get; set; }
    public double Y { get; set; }
}

您可以在此处找到更多详细信息:http://www.sharpcrafters.com/solutions/notifypropertychanged#

答案 2 :(得分:1)

你当然可以。在更改视图模型时,您只需简单地放松更新视图的方法。现在有办法克服这个问题。

  1. 重新应用DataContext,这样就可以评估所有绑定 再次,但这是非常昂贵的。
  2. 在ui中,获取所需属性的绑定并调用    UpdateTarget
  3. 但显然这些都是非常奇怪的解决方法。值得一提的是,绑定到未实现INotifyPropertyChanged的对象通常较慢。

答案 3 :(得分:0)

我会说不。你必须以任何方式实现INotifyPropertyChanged,否则与twoway绑定将无法正常工作。