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

C# 如何在不使用INotifyPropertyChanged的情况下更新视图和视图模型,c#,wpf,mvvm,C#,Wpf,Mvvm,当视图和视图模型之间存在双向绑定时,我们将实现INotifyPropertyChanged接口,该接口具有以下事件: // Summary: // Occurs when a property value changes. event PropertyChangedEventHandler PropertyChanged; 但是我可以在不实现INotifyPropertyChanged的情况下执行同样的操作吗?如果要避免显式实现INotifyPropertyChanged,可以使用类似

当视图和视图模型之间存在双向绑定时,我们将实现INotifyPropertyChanged接口,该接口具有以下事件:

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

但是我可以在不实现INotifyPropertyChanged的情况下执行同样的操作吗?

如果要避免显式实现
INotifyPropertyChanged
,可以使用类似PostSharp的代码编织工具。然后,实现
INotifyPropertyChanged
变得非常简单

[NotifyPropertyChanged]
public class Shape
{
    public double X { get; set; }
    public double Y { get; set; }
}

您可以在此处找到更多详细信息:。

如果您不想显式实现
INotifyPropertyChanged
,可以使用类似PostSharp的代码编织工具。然后,实现
INotifyPropertyChanged
变得非常简单

[NotifyPropertyChanged]
public class Shape
{
    public double X { get; set; }
    public double Y { get; set; }
}

您可以在这里找到更多详细信息:。

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

我会说不。您必须以任何方式实现INotifyPropertyChanged,否则与twoway的绑定将不起作用

当然可以。当viewmodel发生更改时,您只需松开更新视图的简单方法。现在有办法克服这一点

  • 重新应用
    DataContext
    ,这样所有绑定都会得到评估 再说一次,但这是非常昂贵的
  • 在ui中,获取所需属性的绑定并调用

  • 但显然,这些都是非常奇怪的解决办法。同样值得一提的是,绑定到未实现INotifyPropertyChanged的对象通常速度较慢。

    当然可以。当viewmodel发生更改时,您只需松开更新视图的简单方法。现在有办法克服这一点

  • 重新应用
    DataContext
    ,这样所有绑定都会得到评估 再说一次,但这是非常昂贵的
  • 在ui中,获取所需属性的绑定并调用

  • 但显然,这些都是非常奇怪的解决办法。还值得一提的是,绑定到未实现INotifyPropertyChanged的对象通常较慢。

    如果无法实现
    INotifyPropertyChanged
    (INPC)(或者没有要绑定到的源代码)然后,您应该在视图模型中包装您想要绑定到的任何对象,视图模型将为绑定实现INPC,并且必须获取/设置数据到另一个类。

    如果您不能实现
    INotifyPropertyChanged
    (INPC)(或者没有要绑定到的源代码)然后,您应该在视图模型中包装要绑定到的任何对象,视图模型将为绑定实现INPC,并且必须获取/设置数据到另一个类。

    可以用几种不同的方式解释“执行相同的操作”。如果您问“我可以添加一个名为PropertyChanged的事件处理程序吗”,那么是的,您可以!有没有什么具体的原因让你不能使用或不喜欢使用INotifyPropertyChanged?@Clemens我也有这个问题。考虑一个第三方库,您希望直接在WPF中显示对象。当然,通常您会将这些对象视为模型,并创建viewmodel。但当您使用类似PropertyGrid的东西时,这是相当困难的。我在物理引擎和属性网格上遇到了这个问题。“做同样的事情”可以用几种不同的方式来解释。如果您问“我可以添加一个名为PropertyChanged的事件处理程序吗”,那么是的,您可以!有没有什么具体的原因让你不能使用或不喜欢使用INotifyPropertyChanged?@Clemens我也有这个问题。考虑一个第三方库,您希望直接在WPF中显示对象。当然,通常您会将这些对象视为模型,并创建viewmodel。但当您使用类似PropertyGrid的东西时,这是相当困难的。我有一个物理引擎和属性网格的问题。