Подтвердить что ты не робот

Как я могу выполнить привязку данных в С#?

У меня есть следующий класс

public class Car
{
   public Name {get; set;}
}

и я хочу связать это программно с текстовым полем.

Как это сделать?

Съемка в темноте:

...
Car car = new Car();
TextEdit editBox = new TextEdit();
editBox.DataBinding.Add("Name", car, "Car - Name");
...

Я получаю следующую ошибку

"Невозможно связать с именем" Имя "в целевом элементе управления.

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

4b9b3361

Ответ 1

Вы хотите

editBox.DataBindings.Add("Text", car, "Name");

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

Ответ 2

Не глядя на синтаксис, я уверен, что это:

editBox.DataBinding.Add("Text", car, "Name");

Ответ 3

editBox.DataBinding.Add("Text", car, "Name");

Первый arg - это имя свойства управления, второе - объект для привязки, а последний - имя свойства объекта, которое вы хотите использовать в качестве источника данных.

Ответ 4

Вы довольно близки, строка привязки данных будет

editBox.DataBinding.Add("Text", car, "Name");

Этот первый параметр является свойством вашего объекта editbox, который будет привязан к данным. Второй параметр - источник данных, к которому вы привязываетесь, и последний параметр - это свойство источника данных, к которому вы хотите привязать.

Имейте в виду, что привязка данных является одним из способов, поэтому, если вы меняете окно редактирования, тогда объект автомобиля обновляется, но если вы меняете название автомобиля непосредственно, поле редактирования не обновляется.

Ответ 5

Try:

editBox.DataBinding.Add( "Text", car", "Name" );

Ответ 6

Я считаю, что

editBox.DataBindings.Add(новое связывание ( "Текст", автомобиль, "Имя" ));

должен сделать трюк. Не пробовал, но я думаю, что идея.

Ответ 7

Вы пытаетесь привязать к "Name" элемента управления TextEdit. Имя используется для доступа к программному обеспечению и не может быть связано с ним. Вы должны быть привязаны к тексту элемента управления.

Ответ 8

Ниже приведен общий класс, который может использоваться как свойство и реализует INotifyPropertyChanged, используемый связанными элементами управления, для фиксации изменений в значении свойства.

public class NotifyValue<datatype> : INotifyPropertyChanged 
{
    public event PropertyChangedEventHandler PropertyChanged = delegate { };

    datatype _value;
    public datatype Value
    {
        get
        {
            return _value;
        }
        set
        {
            _value = value;
            PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Value"));
        }
    }

}

Он может быть объявлен следующим образом:

public NotifyValue<int> myInteger = new NotifyValue<int>();

и назначается в текстовое поле, подобное этому

Textbox1.DataBindings.Add(
    "Text", 
    this, 
    "myInteger.Value", 
    false, 
    DataSourceUpdateMode.OnPropertyChanged
);

.. где "Текст" - это свойство текстового поля, 'this' - текущий экземпляр формы.

Класс не должен наследовать класс INotifyPropertyChanged. Когда вы объявляете событие типа System.ComponentModel.PropertyChangedEventHandler, событие изменения класса будет подписано с помощью блока данных управления

Ответ 9

Использование синтаксиса С# 4.6:

editBox.DataBinding.Add(nameof(editBox.Text), car, nameof(car.Name));

если автомобиль имеет значение null, то вышеописанный код будет работать более заметным образом, чем использование литеральной строки для представления datamember of car

Ответ 10

it

 this.editBox.DataBindings.Add(new Binding("Text", car, "Name"));