Простая привязка данных между текстовым полем и заголовком формы - PullRequest
3 голосов
/ 09 июля 2010

Я новичок в C # и привязке данных, и в качестве эксперимента я пытался привязать текст заголовка формы к свойству:

namespace BindTest
{
    public partial class Form1 : Form
    {
        public string TestProp { get { return textBox1.Text; } set { } }

        public Form1()
        {
            InitializeComponent();
            this.DataBindings.Add("Text", this, "TestProp");
        }
    }
}

К сожалению, это не работает.Я подозреваю, что это как-то связано с тем, что свойство не отправляет события, но я недостаточно разбираюсь в привязке данных, чтобы точно знать, почему.

Если я связываю текст заголовка непосредственно с текстовым полем, например:

this.DataBindings.Add("Text", textBox1, "Text")

Тогда он работает правильно.

Любое объяснение, почему первый пример кодане работа будет оценена.

Ответы [ 2 ]

3 голосов
/ 09 июля 2010

Вы должны реализовать интерфейс INotifyPropertyChanged.Попробуйте следующий код и посмотрите, что произойдет, если вы удалите NotifyPropertyChanged ("MyProperty"); из установщика:

private class MyControl : INotifyPropertyChanged
{
    private string _myProperty;
    public string MyProperty
    {
        get
        {
            return _myProperty;
        }
        set
        {
            if (_myProperty != value)
            {
                _myProperty = value;
                // try to remove this line
                NotifyPropertyChanged("MyProperty");
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    private void NotifyPropertyChanged(string propertyName)
    {
        if(PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
}

private MyControl myControl;

public Form1()
{
    myControl = new MyControl();
    InitializeComponent();
    this.DataBindings.Add("Text", myControl, "MyProperty");
}

private void textBox1_TextChanged(object sender, EventArgs e)
{
    myControl.MyProperty = textBox1.Text; 
}
1 голос
/ 09 июля 2010

Я думаю, вам нужно реализовать интерфейс INotifyPropertyChanged.Этот интерфейс необходимо реализовать для бизнес-объектов, которые используются в привязке данных Windows Forms.При реализации интерфейс сообщает связанному элементу управления изменения свойств бизнес-объекта.

Как выполнить интерфейс INotifyPropertyChanged

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...