应如何判断用户是否通过交互式操作而弄“脏”了界面中绑定的数据?
在WinForm的设计中,需要判断用户是否通过界面中的控件修改了其所绑定的数据,即为“弄脏了界面”。如果弄脏了,就要即时将导航工具栏中的“新增”、“删除”按钮标签切换为“保存”和“还原”。
为达到此目的,在TextBox、ComboBox的TextChanged事件,在NumericUpDown、DateTimePicker控件的ValueChanged事件,在CheckBox控件的CheckStateChanged事件,在RadioButton控件的CheckedChanged事件,以及在DataGridView控件的CurrentCellDirtyStateChanged事件中编写代码,调用把界面弄脏的处理方法:MakeFormDirty()。
但这样做有个问题:固然用户的交互式修改会触发这些事件,但是在窗体加载时、乃至记录的翻页导航时也同样会触发这些事件。因而,要想在这些非交互式修改的情况下不引起导航工具栏状态的切换,就不得不在窗体加载、记录翻页等过程完成时,加上一句把工具栏变回“干净”状态的语句。如此虽然“解决”了问题,但一来似乎有点麻烦,二来自我老是感觉方法似乎不太地道。
请问:这是否是最好、或者说唯一的解决办法了?
在那些××Changed事件中编写代码来处理这件事,是否是正确的和合适的?