我有一个列表框绑定到List<object>
作为其DataSource。我想要做的是使用Listbox的SelectedValue属性(即对应于当前选择的对象)作为一些文本框的DataSource,这些文本框将显示对象的某些值以进行编辑。
我试过了
TextBox.DataBindings.Add(new Binding("Text", ListBox, "SelectedValue.name"));
和
TextBox.DataBindings.Add(new Binding("Text", ListBox.SelectedValue, "name"));
但由于ListBox中没有选择任何内容(因为表单尚未显示),因此我得到一个关于“Value not not null”的异常。
现在我知道我可以(重新)绑定到我的表单的SelectionChangeCommitted处理程序中的ListBox.SelectedValue(即,在做出选择之后),但是如果我必须这样做,我不妨只设置TextBox的值直接(诚然,我可以这样做来解决这个问题,但我想了解更多有关数据绑定的信息)。
所以我的问题是,简而言之:是否可以绑定到ListBox.SelectedValue 一次(最初,在ListBox有选择之前)并避免空值异常,如果是,如何?
答案 0 :(得分:1)
我不确定你的projectNameCtrl
是哪个控件,但是你想要绑定你的TextBox。像这样:
textBox1.DataBindings.Add(new Binding("Text", listBox1, "selectedvalue"));
其中:
textBox1
是您的TextBox
listBox1
是您的ListView
修改强>
您应该能够绑定ListBox,即使该ListBox没有选定的项目,因此您的'值不能为空'必须是另一个原因。我建议使用调试器来确定哪个对象特别为null。
首先检查控件的DataBindings.Count
属性,可以确保不会多次绑定控件数据;如果它等于零,你还没有数据绑定该控件:
if (textBox1.DataBindings.Count == 0) {
// OK to data bind textBox1.
}
答案 1 :(得分:0)
我认为你需要在每个selectedItemChanged事件上做点什么......
我知道这不能回答你的问题,但我会考虑使用WPF,因为这在WPF中更加优雅,让我们面对它,不要在代码中创建GUI(使用XAML代替当你完成你的项目时,你的理智会更加完整。我不记得有足够的窗体,但是在WPF中,你只是在你绑定的后端对象上实现了INotifyPropertyChanged,然后当你绑定到该ListBox的SelectedItem属性时,你会自动获得自SelectedItem以来的更新property是DependencyProperty。