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.

War es hilfreich?

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);
        }
    }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top