2016-05-16 26 views
-2

Es ist wirklich seltsam, aber UI wird nicht aktualisiert, wenn ich BindableBase.SetProperty() nennen:BindableBase.SetProperty aktualisiert nicht UI

private string person; 
public string Person 
{ 
    get { return person; } 
    set 
    { 
     person = value; 
     SetProperty(ref this.person, value);//Not updating UI 
     //OnPropertyChanged("Person");//It works really nice 
    } 
} 

I Prism.Core.6.1.0\lib\net45\Prism.dll und seine Version=6.1.0.0 verwenden.

jedoch OnPropertyChanged(string propertyName) perfekt funktioniert:

public event PropertyChangedEventHandler PropertyChanged; 
public void OnPropertyChanged(string propertyName) 
{ 
    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 
} 

Was mir fehlt? Jede Hilfe würde sehr geschätzt werden! :)

+0

@downvoter warum Sie downvote? – StepUp

Antwort

1

Das ist wegen der person = value; Anweisung. BindableBase.SetProperty prüft auf Gleichheit zwischen den beiden Parametern und löst nur das Ereignis PropertyChanged aus, wenn sie nicht gleich sind. Das Entfernen dieser Zeile sollte also helfen.

2

Der Weg SetProperty funktioniert, indem Sie alle erforderlichen Update-Logik für Sie tun. Es wird überprüft, ob sich der Wert geändert hat, und entweder sofort zurückkehren oder den Wert aktualisieren (was möglich ist, da er von ref übergeben wird) und dann das geänderte Eigenschaftsereignis auslösen.

Sie machen die Hälfte seiner Arbeit im Voraus, so wird es immer Rückkehr sofort wird es keinen Unterschied zwischen dem person Feld und value finden.

Ändern Sie einfach Ihre Immobilie:

public string Person 
{ 
    get { return person; } 
    set { SetProperty(ref person, value); } 
} 
+0

Danke für Ihre Antwort! Es ist wirklich cool, aber Grx70 war der erste und er hat eine gute Antwort gegeben. Ich habe mich für deine Mühe aufgerüttelt. Deine Antwort ist wirklich nett. – StepUp