Ich habe eine Reihe von Checkboxen auf meiner Form mit ihren Checked Eigenschaften Boolesche Eigenschaften auf dem Datenmodell gebunden:Warum sollte ich eine Formatausnahme erhalten, wenn ich eine boolesche Bindung mit WriteValue aktualisiere?
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))
Es gibt auch einen Event-Handler für alle Kontrollkästchen auf dem Bildschirm, der die Databound Wert stellt sicher, geteilt ist, korrekt auf den geprüften Wert gesetzt.
private void AllCheckboxes_CheckedChanged(object sender, EventArgs e)
{
var chk = ((CheckBox)sender);
var binding = chk.DataBindings["Checked"];
if (binding != null)
binding.WriteValue();
}
In einigen Fällen kann das erste Mal in dieser Form und die Bindungen geladen werden, erhalte ich eine Ausnahme:
Kann den Wert auf die gewünschte Art nicht formatiert werden.
bei System.ComponentModel.ReflectPropertyDescriptor.SetValue (Object Komponente, Object-Wert) bei System.Windows.Forms.BindToObject.SetValue (Objektwert) bei System.Windows.Forms.Binding.PullData (Boolean umformatieren, Boolean Kraft) bei System.Windows.Forms.Binding.WriteValue()
Es richtig für das erste Kontrollkästchen funktioniert das Ereignis zu verarbeiten, aber dann wird die zweite, diese Ausnahme werfen.
Die Datenquelle ist eine Schnittstelle meiner Datenmodell
public interface IMyDataModel
{
bool MyBooleanProperty1 { get; set; }
bool MyBooleanProperty2 { get; set; }
bool MyBooleanProperty3 { get; set; }
}
Und ich kann das Datenmodell überprüfen, ob sich richtig eingestellt ist, einen Haltepunkt direkt vor dem .WriteValue im Ereignishandler, indem. Ich kann sogar einen Haltepunkt in den Setter der gebundenen booleschen Eigenschaft setzen, und es wird auch korrekt aufgerufen.
Wenn ich die FormattingEnabled
Eigenschaft der Bindung auf True setzt, behebt es das Problem. Aber ich frage mich, warum ich das überhaupt erst machen muss, da ich eine System.Boolean
-Eigenschaft im UI-Objekt an eine bool
-Eigenschaft an der Datenquelle binde.
Warum sollte ich in diesem Fall diese Ausnahme bekommen?
haben Sie aktiviert 'IsThreeState' Eigenschaft gehen kann? –
Nein, IsThreeState ist nicht festgelegt – Rachel
Ich würde versuchen, "IsThreeState" zu setzen oder binden Sie an NULL Bool. Ich verstehe, dass dies nicht wie ein Nullbindungs-Problem aussieht, aber ich erwarte, dass es in Checkboxen null behandelt. –