Winforms数据绑定到自定义类

10

我正在尝试将一些Winform对象绑定到一个自定义类上,更具体地说,是绑定到我的自定义类的一个实例上,该实例已经在代码中添加到了窗体中。这是一个C#、.NET 2010 Express的示例。

例如,这是该类的一个片段以及UserInfoForm。

public class UserInfo
{
    [XmlAttribute]
    public string name = "DefaultName";

    [XmlAttribute]
    public bool showTutorial = true;

    [XmlAttribute]
    public enum onCloseEvent = LastWindowClosedEvent.Exit;
}

public enum LastWindowClosedEvent
{
    MainMenu, 
    Exit, 
    RunInBackground
}


public partial class Form1 : Form
{
    UserInfo userToBind = new UserInfo();

    TextBox TB_userName = new TextBox();
    CheckBox CB_showTutorial = new CheckBox();
    ComboBox DDB_onCloseEvent = new ComboBox();

    public Form1()
    {
        InitializeComponent();
    }
}

现在,我想将这些表单控件的值绑定到它们在userToBind中对应的值,但一直没有成功。我找到的所有教程要么过时(2002年),要么是关于将控件绑定到数据集或其他类型的数据库。

显然我忽略了什么,但我还没有弄清楚是什么。

非常感谢任何您可以分享的信息。

更多信息:UserInfo旨在与XML兼容,以便可以将其保存为用户配置文件。 UserInfo将包含其他自定义XML类,全部嵌套在UserInfo下面,许多控件只需要访问这些子类。

1个回答

19

你可以使用控件(文本框,复选框等)的 DataBindings 属性将绑定添加到特定控件。例如:

public Form1()
{
    InitializeComponent();
    TB_userName.DataBindings.Add("Text", userToBind, "name");
}

另外,如果我没记错的话,数据绑定只能用于属性,所以您首先需要相应地修改UserInfo类。此外,如果您希望在代码中修改对象时UI能够自动更新,您必须在自定义类中实现INotifyPropertyChanged


4
我发现属性需要是public的,internal对我没有用。 - Richard C
2
这是一篇旧帖子,但如果有人来到这里,值得注意的是,现在您可以避免数据绑定中的静态字符串 - TB_userName.DataBindings.Add(nameof(TB_username.Text), userToBind, nameof(userToBind.name)); - Chris M.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接