Как я могу выполнить привязку данных в С#?
У меня есть следующий класс
public class Car
{
public Name {get; set;}
}
и я хочу связать это программно с текстовым полем.
Как это сделать?
Съемка в темноте:
...
Car car = new Car();
TextEdit editBox = new TextEdit();
editBox.DataBinding.Add("Name", car, "Car - Name");
...
Я получаю следующую ошибку
"Невозможно связать с именем" Имя "в целевом элементе управления.
Что я делаю неправильно и как мне это делать? Я нахожу концепцию привязки данных немного сложнее понять, исходя из веб-разработки.
Ответы
Ответ 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"));