Mam kilka pól wyboru na mojej postaci z ich Sprawdzone właściwości związane z właściwościami logicznych na modelu danych:Dlaczego otrzymam wyjątek formatu podczas aktualizowania powiązania logicznego za pomocą funkcji WriteValue?
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))
Istnieje również wspólna obsługi zdarzeń dla wszystkich wyboru na ekranie, który zapewnia wartość z danymi jest poprawnie ustawione na sprawdzoną wartość.
private void AllCheckboxes_CheckedChanged(object sender, EventArgs e)
{
var chk = ((CheckBox)sender);
var binding = chk.DataBindings["Checked"];
if (binding != null)
binding.WriteValue();
}
W niektórych przypadkach, po raz pierwszy ta forma i powiązania są ładowane, otrzymuję wyjątek:
nie można sformatować wartość żądanego typu.
w System.ComponentModel.ReflectPropertyDescriptor.SetValue Component Object (obiekt), wartości w System.Windows.Forms.BindToObject.SetValue (wartość obiektu) w System.Windows.Forms.Binding.PullData (logiczna reformat, logiczna siła) w System.Windows.Forms.Binding.WriteValue()
on działa poprawnie pierwszego wyboru do przetwarzania zdarzeń, a następnie drugi usunie tego wyjątku.
Źródłem danych jest interfejsem mojego datamodel
public interface IMyDataModel
{
bool MyBooleanProperty1 { get; set; }
bool MyBooleanProperty2 { get; set; }
bool MyBooleanProperty3 { get; set; }
}
I mogę zweryfikować, że sam model danych jest ustawiony prawidłowo przez ustawienie punktu przerwania tuż przed .WriteValue w obsługi zdarzeń. Mogę nawet umieścić punkt przerwania w ustawianiu związanej właściwości boolowskiej, i jest ona również nazywana poprawnie.
Jeśli ustawię właściwość FormattingEnabled
wiązania na wartość true, problem zostanie rozwiązany. Ale zastanawiam się, dlaczego w ogóle muszę to zrobić, ponieważ wiążę właściwość System.Boolean
w obiekcie interfejsu użytkownika z właściwością bool
w źródle danych.
Dlaczego miałbym otrzymać ten wyjątek w tym przypadku?
czy włączona 'własności IsThreeState'? –
Nie, IsThreeState nie jest ustawiony – Rachel
Chciałbym ustawić "IsThreeState" lub uczynić twoje powiązanie z zerowalnym boolem. Rozumiem, że nie wygląda to na problem wiążący o wartości zerowej, ale oczekuję, że w polach wyboru będzie mieć pustą obsługę. –