将WinForms ListBox绑定到对象属性

sol*_*erg 2 data-binding listbox winforms

我是第一次做一些WinForms编码,我正在尝试使用数据绑定.

我有一个列表框,我从我的控制器对象绑定到一个字符串数组,我也想将列表框中的SelectedItem绑定到控制器上的另一个字符串属性,以便我可以跟踪它.

listBox.DataSource = controller.ItemNames;
listBox.DataBindings.Add(new Binding("SelectedItem", controller, "CurrentItem"));
Run Code Online (Sandbox Code Playgroud)

我希望一旦用户选择列表框中的不同项目,就会更新控制器上的CurrentItem属性,但似乎只有在焦点移动到表单上的另一个项目时它才会更新.

这是预期的行为吗?有没有办法立即更新SelectedItem绑定?

and*_*nov 9

通常,如果您需要立即更新模型,则需要按照其他帖子中的建议使用Use DataSourceUpdateMode.OnPropertyChanged.

但它对ListBox.SelectedItem不起作用.原因是因为ListBox没有公开SelectedItemChanged事件(但是暴露了SelectedValueChanged和SelectedIndexChanged),因此DataBinding不知道控件中的某些内容已经发生了变化.

作为解决方法,您可以在控件的设置代码中添加以下行:

listBox.SelectedIndexChanged +=
  (s, args) => listBox.DataBindings["SelectedItem"].WriteValue();
Run Code Online (Sandbox Code Playgroud)


Jac*_*nev 5

使用DataSourceUpdateMode.OnPropertyChanged

listBox.DataBindings.Add(new Binding("SelectedItem", controller, "CurrentItem", 
                                true, DataSourceUpdateMode.OnPropertyChanged));
Run Code Online (Sandbox Code Playgroud)