簡體   English   中英

如何將控件的兩個屬性正確綁定到兩個對象屬性

[英]How to bind control's two properties to two object properties properly

我有一個帶有TextBox的窗體,如下所示:

        Form f = new Form();
        TextBox t = new TextBox ();
        t.Click += new EventHandler(t_Click);
        t.LostFocus += new EventHandler(t_LostFocus);

        Testus tt = new Testus();

        t.DataBindings.Add("Left", Testus , "X");
        t.DataBindings.Add("Text", Testus , "Test");

        f.Controls.Add(t);
        f.ShowDialog();

和Testus類是這樣的:

class Testus
{
    public string Test
    {
        get
        {
            return _text;
        }
        set
        {
            Console.WriteLine("Acomplished: text change");
            _text = value;
        }
    }
    private string _text;

    public int X
    {
        get
        {
            return x;
        }
        set
        {
            Console.WriteLine("Acomplished: X changed");
            x = value;
        }
    }
    int x;

    public Testus()
    {

    }
}

如您所見,我將TextBox綁定到Testus類。 具體來說,我將TextBox.Left綁定到Testus.X,將TextBox.Text綁定到Testus.Test。 我想補充一下,更改Controls Left值會影響Testus.X值,反之亦然。 與TextBox.Text和Testus.Test相同。

我為TextBox控件的Click和LostFocus添加了處理程序,如下所示:

    static void t_LostFocus(object sender, EventArgs e)
    {
        Console.WriteLine("TextBox lost focus");
    }

    static void t_Click(object sender, EventArgs e)
    {
        Console.WriteLine("Moving to right...");
        ((Control)sender).Left = 100;
    }

我做這個測試:

  1. 運行應用程序
  2. 在TextBox中輸入文字
  3. 將焦點轉移到其他控件

我在控制台中得到以下結果:

TextBox lost focus

就是這樣! Testus.Test不會改變它的價值!?

但是當我這樣做時:

  1. 運行應用程序
  2. 單擊文本框(更改左值)

我得到以下結果:

Moving to right...
Acomplished: X changed

似乎將“綁定到X”起作用。 和文本不測試。 當我將綁定的位置更改為此時:

    t.DataBindings.Add("Text", Testus , "Test");
    t.DataBindings.Add("Left", Testus , "X");

比文本綁定有效,而X綁定無效。 因此,總而言之:只有第一個DataBinding起作用。

所以我的問題是:如何將TextBox的兩個屬性(左,文本)綁定到我的對象(Testus)的兩個屬性(X,Test),以便其正常工作?

我一直這樣做。

Binding b = new Binding("Test");  
b.Source = tt;  
t.SetBinding(TextBox.TextProperty, b);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM