Ich habe einen Telerik RadDataForm, mit ein paar DataFormDataField ist, die Nullable-Eigenschaften gebunden sind:Einstellung der Eigenschaft in ViewModel auf null?
<telerik:DataFormDataField Label="My Property">
<telerik:RadNumericUpDown Value="{Binding Path=MyProperty}" />
</telerik:DataFormDataField>
Und:
private double? myProperty;
public double? MyProperty
{
get { return this.myProperty; }
set
{
this.myProperty = value;
this.onPropertyChanged(nameof(this.MyProperty));
}
}
Und:
public event PropertyChangedEventHandler PropertyChanged;
private void onPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
Wenn das Formular geladen, Die Eigenschaft ist null, daher ist das Steuerelement leer. Wenn der Benutzer das Steuerelement eingibt oder verwendet, um eine Zahl in die Eigenschaft einzufügen, zeigt das Steuerelement den Wert an und die Eigenschaft wird auf den richtigen Wert festgelegt.
Ich muss in der Lage sein, die Eigenschaft auf Null im Code zurückzusetzen und das Steuerelement wieder gelöscht werden. Wenn ich die Eigenschaft auf null festlegen möchte, wird das Steuerelement leider nicht geändert und enthält weiterhin den vorherigen Wert.
Irgendwelche Ideen, wie man das schafft?
=== === NACHTRAG
Um zu klären, ob dies ein Problem in Telerik RadNumericUpDown Kontrolle war, oder in Grund WPF verbindlich, ich ersetzte sie durch IntegerUpDown von Alex Titarenko der WPFControls:
<telerik:DataFormDataField>
<xctk:IntegerUpDown Value="{KtWpf:IntegerBinding Path=mileageend}" />
</telerik:DataFormDataField>
Ich sehe genau das gleiche Verhalten.
=== === OOPS
OK, das Problem hatte nichts mit der Bindung zu tun. Begraben im Code für das Ansichtsmodell, das das Steuerelement unterstützt, das dieses Datenformular enthielt, würden wir das Objekt neu erstellen, an das das Datenformular gebunden war.
Was passierte, war, dass wir, bevor wir zu dem Code kamen, der diese Felder auf neu gesetzt hatte, ein neues Objekt neu erstellten und auf den Verweis des Ansichtsmodells verweisen würden. Als ich also im Debugger durchging, betrachtete ich ein Objekt und setzte seine Felder auf null, aber das Datenformular war immer noch an das Original gebunden, das nicht geändert wurde.
Wenn ich die Felder des Objekts, auf die das Datenformular tatsächlich gebunden ist, auf Null setze, funktioniert alles einwandfrei.
Sorry, jeder, für die Ablenkung, und danke für die Hilfe.
Ein Tipp: Wenn das, was passiert, keinen Sinn ergibt, kann es sein, dass das, was passiert, nicht das ist, was Sie denken.
Ihre öffentliche MyProperty ist nicht nullfähig, es ist ein normales Double. – slugster
Sorry, das war ein Tippfehler, als ich meinen Code nach SO kopierte. Die Eigenschaft in meinem Code war nullfähig. Der ursprünglich eingegebene Code hätte nicht kompiliert. Mein Code wie geschrieben, mit Eigenschaft und Hintergrundfeld, die beide nullable sind, zeigt das Verhalten an, über das ich mich beschwere. –
Können Sie den Code für 'onPropertyChanged' anzeigen? –