Synchrone bevöl DependencyProperties einer Zollkontrolle in Silverlight
-
21-08-2019 - |
Frage
Ich habe ein Silverlight-Steuerelement mit zwei Eigenschaften; Text und Id. Ich habe unten DependencyProperties für diese gemäß dem Code erstellt.
public static readonly DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(string), typeof(LookupControl), new PropertyMetadata(NotifyPropertyChanged));
public static readonly DependencyProperty IdProperty = DependencyProperty.Register("Id", typeof(Guid?), typeof(LookupControl), new PropertyMetadata(NotifyPropertyChanged));
public event PropertyChangedEventHandler PropertyChanged;
public static void NotifyPropertyChanged(object sender, DependencyPropertyChangedEventArgs args)
{
var control = sender as LookupControl;
if (control != null && control.PropertyChanged != null)
{
control.PropertyChanged(control, new PropertyChangedEventArgs("Text"));
}
}
public Guid? Id
{
get { return (Guid?)GetValue(IdProperty); }
set { SetValue(IdProperty, value); }
}
public string Text
{
get { return (string)GetValue(TextProperty); }
set { SetValue(TextProperty, value); }
}
Bei einem Steuerverfahren wird die Id zuerst besiedelt und dann den Text. Mein Problem ist, dass, wenn ich binden an diese Steuerung Text und Id, ich möchte ihre Daten synchron aufgefüllt werden, so dass, wenn ein Property Ereignis ausgelöst wird entweder auf Eigenschaft, beide aktualisierten Daten haben.
Zu diesem Zeitpunkt ich fange, wenn die ID geändert hat, durchgeführt einige Verarbeitung, und falls erforderlich, habe ich den Text auf einen neuen Wert. Aber sobald diese OnChange von Id beendet hat, dann das Steuerverfahren weiter und füllt den Text, nachdem ich es schon wieder zu sonst etwas geändert habe.
Lösung
Kalt Sie die Werte speichern und nur einstellen, wenn Sie beide haben?
private Guid? id;
private string text;
public Guid?Id
{
get { return id; }
set {
id = value;
TrySetValue();
}
}
public string Text
{
get { return text; }
set { text = value;
TrySetValue()}
}
private void TrySetValue()
{
if (id != null && text != null)
{
SetValue(IdProperty, id);
SetValue(TextProperty, text);
}
}