我有一個有趣的與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