0

ここでの目的は、BindingSource + Object を DataSource および TextBox として使用して、オブジェクトのプロパティ値を表示することです。

私が直面している問題は、TextBox が基になるオブジェクトのプロパティ値の変更を反映していないことです。

中国人が言うように、1 つの写真は 1000 の単語に等しいので、私が直面している問題を示すデモ コードを以下に示します。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime.CompilerServices;


namespace TextBoxDataSourceBindingDemo
{


    public partial class Form1 : Form
    {
        private BindingSource dsSource;
        private BindingDemoClass bDemoClass;
        public Form1()
        {
            InitializeComponent();
            bDemoClass = new BindingDemoClass();
            dsSource = new BindingSource();

            bDemoClass.BindingName = "DemoBinding";
            this.textBox1.DataBindings.Add(new Binding("Text", dsSource, "BindingName",true,DataSourceUpdateMode.OnPropertyChanged));
        }

        private void btnAssignDataSource_Click(object sender, EventArgs e)
        {
           //Setting the datasource is not enough to 
           //update the related textbox
           //refresh must be explicity called ?
           dsSource.DataSource = bDemoClass;
           dsSource.ResetBindings(true);
        }

        private void btnChangePropertyValue_Click(object sender, EventArgs e)
        {
            //Here after setting the property value
            //the textbox should be update with the new value; correct ?
            bDemoClass.BindingName = "DemoBinding2";
        }
    }
    //Demo class used as datasource  
    public class BindingDemoClass : INotifyPropertyChanged
    {
        private string _BindingName = String.Empty;

        public string BindingName
        {
            get { return _BindingName; }
            set
            {
                if (!String.Equals(_BindingName, value))
                {
                    _BindingName = value;
                    NotifyPropertyChanged();
                }
            }
        }

        private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }


        #region INotifyPropertyChanged Members

        public event PropertyChangedEventHandler PropertyChanged;

        #endregion
    }
}

そのため、btnAssignDataSource ボタンをクリックすると、テキスト ボックスが更新されます。バインドされたプロパティが変更 (btnChangePropertyValue) されると、その変更がテキスト ボックスに反映されると思います。

4

1 に答える 1

0

これを試しましたか this.textBox1.DataBindings.Add("Text", dsSource, "BindingName");

于 2013-04-15T16:05:17.337 に答える