Winforms数据绑定到自定义类

Tin*_*ker 9 c# data-binding winforms

我试图将一些Winform对象绑定到一个自定义类,更具体地说是我在代码中添加到Form中的自定义类的一个实例.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();
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,我想将这些表单控件的值绑定到userToBind中它们各自的值,但是没有运气.我能找到的所有教程都要么过时了(2002年),要么将控件绑定到数据集或其他类型的数据库.

我显然忽视了一些事情,但我还没弄清楚是什么.

非常感谢您分享的任何信息.

更多信息:UserInfo设计为XML友好的,因此可以保存为用户配置文件.UserInfo将包含其他自定义XML类,所有这些类都嵌套在UserInfo下,并且许多控件只需要访问这些子类.

Jul*_*lin 16

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

public Form1()
{
    InitializeComponent();
    TB_userName.DataBindings.Add("Text", userToBind, "name");
}
Run Code Online (Sandbox Code Playgroud)

此外,IIRC,数据绑定仅适用于属性,因此您首先需要相应地修改您的UserInfo类.此外,如果您希望在代码中修改对象时自动更新UI,则必须在自定义类中实现INotifyPropertyChanged.

  • 我还发现属性需要公开,内部对我不起作用. (3认同)
  • 这是一篇旧文章,但如果有人在这里结束,值得注意的是,您现在可以避免数据绑定中的静态字符串 - TB_userName.DataBindings.Add(nameof(TB_username.Text), userToBind, nameof(userToBind.name)) ; (3认同)