当我在SpreadsheetGear WorkbookView中编辑单元格并通过按Enter键,Tab键或任何箭头键来启动CellEndEdit事件时,我刚刚输入的值就会被删除。
在我的WorkbookViews事件处理程序将视图的更改推送到模型之前,有没有办法阻止其他控件获得焦点?或者还有另一种方法可以更好地处理这个问题吗?
如果我能在任何地方详细说明或更好地解释自己,请告诉我,谢谢!
我使用一个DevExpress TextEdit和一个SpreadsheetGear WorkbookView创建了一个测试应用程序。如果我添加textEdit1_Validated和textEdit1_Enter,我会得到相同的行为。重点是TextEdit控件,现在似乎是由于验证处理程序。
答案 0 :(得分:0)
显然,DevExpress TextEdit控件的验证处理程序请求焦点,这是模型更新期间运行的其中一个语句的问题。 SpreadsheetGear WorkbookView中数据的视图属性被设置为该属性的模型版本,模型可以具有默认值或用户定义的值。
声明如下:
view.Data = model.IsUserDefined ? model.Data.UserDefined : model.Data.Default
我将语句更改为如下所示:
if (!model.IsUserDefined)
{
view.Data = model.Data.Default;
}
这解决了这个问题,因为如果输入的数据是用户定义的,则用户正在键入数据,而这个if语句允许视图保留该数据,直到基本上整个页面验证之后。仍然在callstack上是模型的更新,特别是这个Data属性。
对不起,这可能不会给一般人提供太多帮助,因为这是个人实施的问题。但是我仍然认为值得注意的是,如果你将一个主要的更新绑定到验证处理程序,那么类似的东西必然会在未来发生越来越多的更新声明。