簡體   English   中英

如何正確使用DataBindings屬性?

[英]How to use DataBindings property properly?

我正在嘗試將Windows窗體標簽綁定到變量。 當我運行該代碼lable1時顯示為50,但是當我使用button1遞增時,它不會更改為51。這是我的嘗試

    int x = 50;
    public int X
    {
        get { return x; }
        set { x = value; }
    }
    public Form1()
    {
        InitializeComponent();
        label1.DataBindings.Add("Text", this, "X", true, DataSourceUpdateMode.OnPropertyChanged);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        X++;
    }

TIA

    int X = 50;

    public Form1() {
        InitializeComponent();
        label1.Text = X.ToString();            
    }

    private void button1_Click(object sender, EventArgs e) {
        X += 1;
        label1.Text = X.ToString();
    }

您可以將數據放入實現INotifyPropertyChanged的另一個類中,以便通知和更新UI:

public partial class Form1 : Form
{
    DataClass dc;
    public Form1()
    {
        InitializeComponent();
        dc = new DataClass();
        label1.DataBindings.Add("Text", dc, "X", true, DataSourceUpdateMode.OnPropertyChanged);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        dc.X++;
    }
}

public class DataClass : INotifyPropertyChanged
{
    int x = 50;
    public int X
    {
        get { return x; }
        set
        {
            x = value;
            NotifyPropertyChanged("X");
        }
    }
    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged(String info)
    {
        var handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(info));
        }
    }
}

您的類表單必須實現INotifyPropertyChanged接口,如下所示:

    public partial class Form1 : Form, INotifyPropertyChanged
    {

        int x = 50;
        public int X
        {
            get { return x; }
            set { x = value; OnPropertyChanged("X"); }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            label1.DataBindings.Add("Text", this, "X", true, DataSourceUpdateMode.OnPropertyChanged);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            X++;
        }
        public event PropertyChangedEventHandler PropertyChanged;

        protected virtual void OnPropertyChanged(string property)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(property));
        }
}

暫無
暫無

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

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