WPF Benachrichtigen PropertyChanged für eine Get-Property

Habe ich die INotifyPropertyChanged umgesetzt mit CallerMemberName

public event PropertyChangedEventHandler PropertyChanged;

protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
 if (PropertyChanged != null)
    {
        PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
}

Also das könnte genannt werden, in den setter für jede Eigenschaft wie - OnPropertyChanged() welche melden würde property-changed-Ereignis, sobald es festgelegt wird. Dies ist nicht der Fall für eine Eigenschaft eine getter-only. Zum Beispiel,

private DateTime _dob;
public DateTime DateOfBirth
{
    get
    {
        return _dob;
    }
    private set
    {
        _dob = value;
        OnPropertyChanged();
        OnPropertyChanged("Age");
    }
}

public int Age
{
    get
    {
        return DateTime.Today.Year - _dob.Year;
    }
}

OnPropertyChanged() funktioniert gut für DateOfBirth, aber zu Benachrichtigen Alter geändert, ich sollte mich daran erinnern zu rufen OnPropertyChanged("Age") innerhalb der setter DateOfBirth. Ich finde das macht den code schwer zu pflegen sind im Laufe der Zeit. Wenn eine neue Eigenschaft ist abhängig von Alter, muss auch Benachrichtigt werden, der setter DateOfBirth. Gibt es einen besseren Weg, dies zu tun, ohne Aufruf von OnPropertyChanged("Alter")?

Dies tut OnPropertyChanged() funktioniert nur auf setter? Wenn nicht, könnten Sie versuchen, setzen die return - Anweisung in einem try-finally, und rufen Sie die OnPropertyChanged() es.
Könnten Sie bitte erläutern. OnPropertyChanged funktioniert immer, aber es sollte nur benachrichtigt, wenn jemand ändert den Wert. Es macht also Sinn, um es im setter. Ich verstehe nicht, wo und warum ich benötigen ein try-finally?
Wenn Sie nicht wollen, zu nennen OnPropertyChanged("Age") mit "Alter" als parameter beim festlegen der DOB-Wert, auf den Age's get Sie zurückgeben konnte der Wert innerhalb eines try, und im inneren der finally zu nennen, könnten Sie die OnPropertyChanged(), ohne die parameter.
Das wird nicht funktionieren. Der Grund, warum ich bin mit OnPropertyChanged ist, wenn jemand änderungen DOB, OnPropertyChanged auslösen Benutzeroberfläche Zugriff Get Alter. Wenn ich mich bewege OnpropertyChanged innerhalb von Alter, es wird in einer Endlosschleife wieder und wieder versuchen, Zugang zu bekommen und immer eine änderungsbenachrichtigung.
Guilherme Kommentare machen überhaupt keinen Sinn. Eigenschaft Benachrichtigung muss natürlich etwas getan werden, wenn die Einstellung, nicht immer, und try/finally-bringt nichts (außer das Ereignis ausgelöst werden, selbst wenn es eine Ausnahme in der getter, das ist einfach nur Bizarr).

InformationsquelleAutor Carbine | 2014-02-14

Schreibe einen Kommentar