底部有三个按钮:添加,编辑,删除.
单击“删除”按钮后,将从文件中永久删除所选行.
单击“添加”或“编辑”按钮时,将弹出第二个窗口(对话框),您可以通过键入名字和姓氏来分别输入新人,或修改并保留现有记录.
如何在MVVM中正确构建此应用程序?以下是我的具体问题:
1)从MVVM的角度来看,我不能直接绑定到XML数据源,或者我可以吗?所以我应该创建实现INotifyPropertyChange的对象Person,然后在ObservableCollection中存储一堆这样的对象.当我需要将更改保存回文件时,我需要编写读取XML文件并将其转换为对象集合的代码,反之亦然.我是对的?
2)在哪里可以将实际保存到XML文件中的“Persist”方法实现?调用此方法有两个位置:单击主窗口的“删除”按钮,或单击“添加/编辑”窗口的“确定”按钮.
3)请注意,同一窗口处理添加和编辑,我如何以适当的MVVM方式实现此窗口?我如何分别显示该窗口的标题“添加”或“编辑”而不诉诸丑陋的if语句i代码?我绑定了两个文本框(名字和姓氏).另请注意,“添加/编辑”窗口具有“确定”和“取消”按钮,在单击“确定”之前不会接受更改,如果单击“取消”,则必须放弃更改.我看到的一个可能的解决方案是克隆Person对象而不是直接绑定到同一个对象,因为list被绑定,这样在单击OK之前列表不会显示更改,但这很毛茸茸,因为我需要编写代码来回复制属性.在MVVM中有更好的方法吗?
预先感谢
亨利
解决方法
1 /如果您的View直接绑定到XML,那么这不是MVVM. MVVM模式会将View绑定到呈现XML的viewmodel.如果您不需要更改XML,那么直接绑定就没有问题,但是因为您要从XML中添加/编辑/删除值,所以让viewmodel控制该交互是有意义的.我确实会创建一个实现INotifyPropertyChanged的Person对象.
2 /在MVVM中,所有功能代码都在viewmodel中.这个Persist按钮将触发一个Command,它调用viewmodel中的方法.这有点令人困惑,并不像代码隐藏’点击’那么简单,但从愚蠢的View / MVVM角度来看更有意义.它也更清洁.
3 /“编辑”屏幕将绑定到Person对象,并将触发Save命令.然后,此命令应执行适当的逻辑,确定它是新记录(插入)还是现有(更新)记录.如果对象是新的,则父viewmodel(您将需要集合的viewmodel而不仅仅是ObservableCollection)需要捕获该事件并将新对象添加到集合中.
此外,“编辑/添加”窗口可以返回结果,并且父viewmodel可以在窗口关闭后调查该结果,然后确定要执行的操作(保存/丢弃,编辑/添加,任何其他验证等).
以下是一些链接:
> The MVVM Pattern – 伟大的MSDN文章,用于MVVM介绍
> How to implement MVVM,ICommand etc – 实施ICommand
> MVVM Command Binding – 更多关于绑定到命令.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。