繁体   English   中英

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

[英]C#(Winforms) Databinding using Listbox.SelectedValue as data source (master-detail)

我有一个绑定到List<object>的列表框作为其数据源。 我想要做的是使用列表框的SelectedValue属性(即与当前选择相对应的对象)作为某些文本框的数据源,这些文本框将显示对象的某些值以供编辑。 我试过了

TextBox.DataBindings.Add(new Binding("Text", ListBox, "SelectedValue.name"));    

TextBox.DataBindings.Add(new Binding("Text", ListBox.SelectedValue, "name"));

但是由于没有在列表框中选择任何内容(因为尚未显示该表单),所以出现了一个关于“值不能为空”的异常。

现在我知道我可以(重新)绑定到窗体的SelectionChangeCommitted处理程序中的ListBox.SelectedValue(即,在做出选择之后),但是如果必须这样做,我也可以直接设置TextBox的值(诚然)我可以这样做以解决问题,但我想了解更多有关数据绑定的信息。

简而言之,我的问题是:是否可以将一次绑定到ListBox.SelectedValue(最初在ListBox进行选择之前)并避免空值异常,如果可以,怎么办?

我不确定您的projectNameCtrl是哪个控件,但是您需要绑定TextBox。 像这样:

textBox1.DataBindings.Add(new Binding("Text", listBox1, "selectedvalue"));

哪里:
textBox1是您的TextBox
listBox1是您的ListView

编辑
即使ListBox没有选定的项目,您也应该能够将其绑定到数据,因此您的“值不能为空”必须是出于其他原因。 我建议使用调试器来确定哪个对象专门为空。

通过首先检查控件的DataBindings.Count属性,可以确保不对数据进行多次DataBindings.Count 如果它等于零,那么您还没有数据绑定该控件:

if (textBox1.DataBindings.Count == 0) {
    // OK to data bind textBox1.
}

我想不起了,我认为您需要在每个selectedItemChanged事件上执行一些操作...

我知道这不能解决您的问题,但是我会考虑使用WPF,因为在WPF中这样做更加优雅,让我们面对现实,不要在代码中创建GUI(而是使用XAML)当您完成项目时,它将更加完好无损。 我记不清足够的Windows窗体,但是在WPF中,您只需在要绑定到的后端对象上实现INotifyPropertyChanged,然后当您绑定到该ListBox的SelectedItem属性时,由于SelectedItem而自动获得更新。属性是DependencyProperty。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM