У меня есть группа флажков в моей форме с проверенными свойствами, связанными с булевыми свойствами в модели данных:
chk1.DataBindings.Add(new BindingValue(this, "Checked", "MyBooleanProperty1", false))
chk2.DataBindings.Add(new BindingValue(this, "Checked", "MyBooleanProperty2", false))
chk3.DataBindings.Add(new BindingValue(this, "Checked", "MyBooleanProperty3", false))
Существует также общий обработчик событий для всех флажков на экране, который гарантирует, что значение базы данных правильно установлено на проверенное значение.
private void AllCheckboxes_CheckedChanged(object sender, EventArgs e)
{
var chk = ((CheckBox)sender);
var binding = chk.DataBindings["Checked"];
if (binding != null)
binding.WriteValue();
}
В некоторых случаях при первом загрузке этой формы и привязок я получаю исключение:
Невозможно отформатировать значение до требуемого типа.
в System.ComponentModel.ReflectPropertyDescriptor.SetValue(компонент объекта, значение объекта) в System.Windows.Forms.BindToObject.SetValue(значение объекта) в System.Windows.Forms.Binding.PullData(Boolean reformat, Boolean force) в System.Windows.Forms.Binding.WriteValue()
Он корректно работает для первого флажка, чтобы обработать событие, но затем второй будет генерировать это исключение.
Источник данных - это интерфейс моего datamodel
public interface IMyDataModel
{
bool MyBooleanProperty1 { get; set; }
bool MyBooleanProperty2 { get; set; }
bool MyBooleanProperty3 { get; set; }
}
И я могу убедиться, что сама модель данных установлена правильно, установив точку останова прямо перед .WriteValue в обработчике событий. Я даже могу поставить точку останова в сеттер связанного логического свойства, и он также называется правильно.
Если я установил свойство FormattingEnabled
привязки к true, это устранит проблему. Но мне интересно, почему мне даже нужно это делать в первую очередь, поскольку я привязываю свойство System.Boolean
в объекте пользовательского интерфейса к свойству bool
в источнике данных.
Почему я должен получать это исключение в этом случае?