如何让 WPF 数据绑定注意到模型属性的更改?

How do I get WPF Databinding to notice changes to properties on the model?

我已经创建了一个 WPF MVVM 应用程序。 ViewModel 具有我可以从 View 绑定到的属性。但是其中一个属性基本上是 json 文档的模型,该文档具有许多属性,可以是 int、string 或其他模型等。在我看来,我有更新这些属性的控件。对象更新但没有触发 PropertyChanged 事件。

处理这种情况的简洁方法是什么?我必须在我的 ViewModel 中创建几十个 属性 访问器还是有更好的方法?

编辑更多细节:

安迪现在使用福迪:

在我的虚拟机中:

public AppModel AppModel { get; set; }

在我的模型中

public class AppModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    public string ApplicationName { get; set; }
    public string ApplicationVersion { get; set; }
}

在我看来:

<TextBox Text="{Binding AppModel.ApplicationName, Mode=TwoWay }"/>
<TextBox Text="{Binding AppModel.ApplicationVersion, Mode=TwoWay}"/>

当我启动应用程序并创建一个新文档时,我在文本框和 json 视图中显示 null。

然后我更新文本框(多次更改选择以确保它更新)但是没有触发调用我的代码来重新填充 JSON 文本

我单击“保存”按钮,其中包含将对象序列化为 JSON 的代码,我可以看到对象中确实存在我的数据。

因为您想保留 MVVM 而不是添加一堆属性(这是有道理的,因为 JSON 架构可能会更改)。我会使用数据模板。

我将从绑定到 TreeViewItemSource 的 JSON 构建一个 'PropertyVMs' 的分层集合。然后为单个PropertyVM的视图定义一个DataTemplate。该模板将显示节点名称和节点内容。当节点的内容发生变化时,该节点可以将该通知传播回它需要去的任何地方,以便底层 JSON 得到更新。

这给了你很大的灵活性。您甚至可以为不同类型的属性定义不同的数据模板,例如数字的上下数字和 DateTime.

的日期时间选择器