我是MVVM(和一些WPF)的新手,在过去的几天里我已经阅读了许多代码项目文章,博文和Stackoverflow问题。我有这样的印象:数据绑定对从数据源(数据库)加载数据后显示数据非常好,并且保持模型与视图同步,并更新视图中模型数据的所有其他外观。验证和保存WPF MVVM中的数据如何正常工作?
但我仍然没有真正知道如何节省,而验证之前,应该工作的权利。我有一个强大的Windows窗体和ADO.NET背景。我非常熟悉编码数据库访问层和视图更新。那时候,您只有临时的临时数据,正在编辑,只有在视图中,以及模型类和数据库中最后保存的数据版本。模型类通常与数据库同步。这是包含尚未保存的数据的观点。
你也有一个保存按钮,将来自控制读取的所有数据,在代码验证它,要么接受,并将其保存到模型和数据库,或者不更新模型,并显示一条错误消息。如果发生错误,用户输入仍留在用户界面中供用户修改。但是没有其他应用程序可以看到它。而且你有一个取消按钮,它只会丢弃包含编辑控件的视图的那一部分 - 该模型仍然有效并保持不变。
使用数据绑定和的ViewModels刚刚从模型类,什么是在文本框中输入暴露数据现在立即进入模型,是它正确与否。 IDataErrorInfo只不过是 - 信息性的。您可以将其视为或忽略它。唯一实施的严格验证是类型转换:永远不能将非数字字符串更新为数字模型字段。但就是这样。我将通过让ViewModel执行所有验证并从属性设置器中抛出对无效数据的异常来解决这个问题。这是实现已知行为的唯一方法。
但哪里保存和数据的丢弃去?我什么时候会将数据写回数据库? TextBox的每个离开都会导致数据库写入,因此我不再需要显式的Save命令(并且只能通过撤消来恢复)?我何时会验证整个数据记录?我将如何处理模型和数据库不同步,无效输入立即传播整个应用程序和所有视图感谢数据绑定?何时以及如何使用“取消”按钮放弃任何用户输入,保持模型不变 - 或者在编辑器对话框打开之前将其恢复到状态?
我觉得MVVM不提供这些基本问题的解决方案。我只是想念他们还是他们真的不存在?如果MVVM不是这个的解决方案,那么是什么?或者MVVM最好不要用于WPF中的数据编辑应用程序?
尝试交叉张贴到http://programmers.stackexchange.com/您的问题(关于软件开发概念性问题) – Surfbutler 2012-07-06 13:17:54