C# 在MVVM WPF中,列表窗口和编辑窗口场景应该如何构造?

C# 在MVVM WPF中,列表窗口和编辑窗口场景应该如何构造?,c#,wpf,mvvm,model,C#,Wpf,Mvvm,Model,此时,我在列表窗口的每一行上都有一个编辑按钮,它在列表视图模型上调用一个EditRow命令。这将实例化一个编辑窗口,该窗口负责自己的视图模型 这一切都很好,但是如何将编辑窗口中的更改传播回列表?我是否公开由编辑窗口调用的UpdateRow命令,或者类似的东西 那么,我如何处理错误,以及确定或取消结果?您使用ObservableCollection并使该集合中的对象实现INotifyPropertyChanged界面,因此当您在编辑窗口中编辑作为该ObservableCollection成员的对象

此时,我在列表窗口的每一行上都有一个编辑按钮,它在列表视图模型上调用一个
EditRow
命令。这将实例化一个编辑窗口,该窗口负责自己的视图模型

这一切都很好,但是如何将编辑窗口中的更改传播回列表?我是否公开由编辑窗口调用的UpdateRow命令,或者类似的东西


那么,我如何处理错误,以及确定或取消结果?

您使用
ObservableCollection
并使该集合中的对象实现
INotifyPropertyChanged
界面,因此当您在编辑窗口中编辑作为该
ObservableCollection
成员的对象时,更改也会自动显示在列表中

这也将处理编辑窗口中的错误和取消,因为如果您取消编辑或处理编辑窗口中的错误,您在编辑窗口中对该对象所做的任何操作都将再次,自动传播回列表,因为您正在从相同的
可观测集合处理相同的对象


如果您打算在访问
ObservaleCollection
中包含的对象时使用线程,那么使用codeproject中的ObservaleCollectionMT可能是一个好主意。

DB验证(或其他)错误之类的错误怎么办?我是否只遵循以下模式:一个错误视图及其viewmodel,以及编辑视图模型上的一个命令来宣布和处理错误?通常,您会从VM向V发送一个错误通知,并且您的视图将以用户友好的方式处理显示错误。但是,您的虚拟机将通过恢复对作为OC成员的对象的更改来处理DAL返回的错误,因此不需要其他任何东西。
IEditableObject
对于支持提交/回滚编辑的对象来说是一个有用的界面。