1

我想将一个文本框的数据绑定到一个Dictionary<string,string>条目。我试图通过数据绑定来实现这一点,因此在用户编辑文本框后内容会得到更新。

这是我所做的演示代码:

具有NameList字典的classA:

class ClassA
{
    public string Name { get; set; }
    public Dictionary<string, string> List { get; set; }

    public ClassA()
    {
        this.Name = "Hello";

        this.List = new Dictionary<string, string>
        {
            {"Item 1", "Content 1"},
            {"Item 2", "Content 2"}
        };
    }
}

在表单中,我绑定textBox1Name并绑定textBox2List["Item 1"]

ClassA temp = new ClassA();

public Form1()
{
    InitializeComponent();

    textBox1.DataBindings.Add("Text", temp, "Name");
    textBox2.DataBindings.Add("Text", temp.List["Item 1"], "");

    label1.DataBindings.Add("Text", temp, "Name");
}

private void textBox2_TextChanged(object sender, EventArgs e)
{
    label1.Text = temp.List["Item 1"];
}

如果我更改textBox1文本,label1内容 ( Name) 将成功更新。

但是如果我更改textBox2文本,label1内容将显示原始List["Item 1"]值。

如何textBox2正确绑定List["Item 1"]

4

1 回答 1

2

使用显式绑定并使用其事件来实现您的目标

        Binding binding = new Binding("Text", temp, "List");
        binding.Parse += new ConvertEventHandler(binding_Parse);
        binding.Format += new ConvertEventHandler(binding_Format);
        textBox2.DataBindings.Add(binding); 

当数据绑定控件的值发生更改时,将发生 Parse 事件。

    void binding_Parse(object sender, ConvertEventArgs e)
    {
        temp.List["Item 1"] = e.Value.ToString();
        label1.Text = temp.List["Item 1"]; 
    }

当控件的属性绑定到数据值时,将发生 Format 事件。

    void binding_Format(object sender, ConvertEventArgs e)
    {
        if (e.Value is Dictionary<string, string>) 
        { 
            Dictionary<string, string> source = (Dictionary<string, string>)e.Value;
            e.Value = source["Item 1"];

        } 
    }
于 2012-10-01T07:08:55.273 回答