.NET WinForms PropertyBinding

时间:2011-08-05 04:54:10

标签: c# .net winforms data-binding properties

我有一个带菜单栏,菜单和menuItem(称为BlaBlub)的WinForm 菜单项CheckOnClick = True(ApplicationSettings)->(PropertyBindings)->Checked映射到设置SomeBool(类型为bool,范围用户,初始值= false)

从设置文件中正确读取值(我使用标签检查它,并且当我在会话之间更改文件时,菜单项也会被选中/取消选择)。

但是,使用以下代码我无法打开应用程序,单击菜单项并将更改后的值存储回文件

    private void Form1_FormClosed(object sender, FormClosedEventArgs e)
    {
        Properties.Settings.Default.Save();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        label1.Text = string.Format("Value is: {0}", Properties.Settings.Default.SomeBool);
    }

我能够使用以下代码将值存储回文件中,但由于这似乎不是惯用的方法,我仍然会寻求一些如何做到这一点的启发。

    private void blaBlubToolStripMenuItem_CheckedChanged(object sender, EventArgs e)
    {
        Properties.Settings.Default.SomeBool = blaBlubToolStripMenuItem.Checked;
    }

1 个答案:

答案 0 :(得分:1)

你说:

  

从设置文件中正确读取值

但是,根据提供的代码,这是不正确的,因为在加载时您没有设置检查状态。相反,我认为您的测试显示初始持久设置值(为false)也是菜单项的默认Checked状态。

因此,您还应通过添加以下内容来初始化控件:

private void Form1_Load(object sender, EventArgs e)
{
    label1.Text = string.Format("Value is: {0}", Properties.Settings.Default.SomeBool);
    blaBlubToolStripMenuItem.Checked = Properties.Settings.Default.SomeBool;
}

注意:通常我会告诉你使用数据绑定,但你不能,因为我相信MenuItem不支持这个。