我有一个有趣的与combobox相关的数据绑定问题。希望有人有一些好的建议。组合框数据绑定问题
我有一个简单的表单,它包含一个文件选取器和一个comboxbox。每次选择文件时,我都会从文件读取一个字符串列表到一个List对象,并设置comboBox.DataSource = listOfStrings。在表单加载事件中,我设置了comboBox.DataBindings.Add(“SelectedItem”,myObject,“PickedValue”);
目的很明确:每次从组合框中选择一个字符串时,我想将该字符串写入myObject.PickedValue。
这就是整个故事。
现在我启动表单,而不是去选择一个文件,我先检查组合框。当然,在这一点上,comboBox.DataSource为null,comboBox.SelectedItem也为null。但是comboBox上的数据绑定已经设置好了(因为设置在表单加载事件中)。现在我的焦点不能从组合框移动到其他任何地方。
我认为原因是,当我尝试检查组合框时,它作为SelectedItem为null。当我尝试将焦点移到其他地方时,触发组合框的数据绑定。基础上,它会尝试将选定的项目转换为字符串,并使用该转换后的字符串更新myObject.PickedValue。由于您无法将null转换为字符串,因此数据绑定验证失败,并且验证机制不允许将我的焦点移到其他地方,而我在此刻被吸引,甚至无法移动以选择文件。
我的问题是,我的应用场景中的常规绑定设置工作流程是什么以防止此陷阱?设置这种数据绑定的正确顺序是什么,所以我可以在数据源被某些东西填满之前检查我的组合框?我试图将myObject.PickedValue绑定到组合框的SelectedText属性(我注意到SelectedText是一个字符串,并且永远不会为null,即使SelectedItem为null)。但有趣的是,即使我从组合框中选择了某些东西,当数据绑定被触发时,SelectedText仍然是空字符串。这里有什么问题?
感谢您的任何帮助。
感谢您给我一个解决方法。我认为禁用组合框直到准备就绪是个好主意。谢谢你解释为什么SelectedText属性不适合我。我想我会以此作为答案。 – Steve 2009-09-13 22:52:39