gpt4 book ai didi

c# - 绑定(bind)到 IList,但得到 "Complex DataBinding accepts as a data source either an IList or an IListSource"

转载 作者:行者123 更新时间:2023-11-30 20:28:32 27 4
gpt4 key购买 nike

如果您在不调试的情况下运行以下代码(或在“启用仅我的代码”处于事件状态的情况下),它似乎可以正常工作。但是,如果您使用调试器启动它并关闭“仅启用我的代码”,您将遇到此异常(然后被库代码吞没):

System.ArgumentException occurred
HResult=-2147024809
Message=Complex DataBinding accepts as a data source either an IList or an IListSource.
Source=System.Windows.Forms
StackTrace:
at System.Windows.Forms.ListControl.set_DataSource(Object value)
InnerException:

这是我的代码的最小版本:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Windows.Forms;

static class Program {
[STAThread]
static void Main() {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm(new MainModel()));
}
}

public class MainModel {
public IList Options { get; } = new List<string> { "Foo", "Bar" };
}

class MainForm : Form {
private System.ComponentModel.IContainer components;
private ComboBox comboBox;
private BindingSource bindingSource;
private ErrorProvider errorProvider;

public MainForm(MainModel mainModel) {
InitializeComponent();
bindingSource.DataSource = mainModel;
}

private void InitializeComponent() {
components = new System.ComponentModel.Container();
bindingSource = new BindingSource(components);
errorProvider = new ErrorProvider(components);
((System.ComponentModel.ISupportInitialize) bindingSource).BeginInit();
((System.ComponentModel.ISupportInitialize) errorProvider).BeginInit();
SuspendLayout();

bindingSource.DataSource = typeof(MainModel);

comboBox = new ComboBox();
comboBox.DataBindings.Add(new Binding("DataSource", bindingSource, "Options", true));
comboBox.DropDownStyle = ComboBoxStyle.DropDownList;
Controls.Add(comboBox);

errorProvider.ContainerControl = this;
errorProvider.DataSource = bindingSource;

((System.ComponentModel.ISupportInitialize) bindingSource).EndInit();
((System.ComponentModel.ISupportInitialize) errorProvider).EndInit();
ResumeLayout(false);
}

}

问题似乎出在数据绑定(bind)上。如果我注释掉行 comboBox.DataBindings.Add(new Binding("DataSource", bindingSource, "Options", true));,则不会发生异常。

我在网上找到了很多关于这个异常的引用资料,但似乎在所有这些情况下,问题都是数据源不是 IList(如异常消息所述)。然而,在这种情况下,Options IList。所以我无法解释这个异常。

我注意到,如果我删除 ErrorProvider,异常不会发生。但我不明白为什么会这样;我的实际程序中需要错误提供程序。

我在 Visual Studio 2015 中工作,目标是 .NET 4.6。

最佳答案

看起来您正在声明 DataBinding,而您的 bindingSource 仍在 BeginInit - EndInit block 中。尝试将该行移动到 EndInit 行之后,或者改为在 OnLoad 覆盖中:

protected override void OnLoad(EventArgs e) {
base.OnLoad(e);
comboBox.DataBindings.Add(new Binding("DataSource", bindingSource, "Options", true));
}

关于c# - 绑定(bind)到 IList,但得到 "Complex DataBinding accepts as a data source either an IList or an IListSource",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47167385/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com