使用Listbox.SelectedValue作为数据源的C#(Winforms)数据绑定(主 - 详细信息)

时间:2012-01-31 04:05:17

标签: c# winforms data-binding listbox

我有一个列表框绑定到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有选择之前)并避免空值异常,如果是,如何?

2 个答案:

答案 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。