Ich versuche zu verstehen, wie die Benutzeroberfläche zu aktualisieren ist, wenn ich eine schreibgeschützte Eigenschaft habe, die von einer anderen Eigenschaft abhängig ist, so dass Änderungen an einer Eigenschaft beide UI-Elemente aktualisieren (in diesem Fall) eine Textbox und eine nur-Lese-Textbox. zum Beispiel:WPF INotifyPropertyChanged für verknüpfte schreibgeschützte Eigenschaften
public class raz : INotifyPropertyChanged
{
int _foo;
public int foo
{
get
{
return _foo;
}
set
{
_foo = value;
onPropertyChanged(this, "foo");
}
}
public int bar
{
get
{
return foo*foo;
}
}
public raz()
{
}
public event PropertyChangedEventHandler PropertyChanged;
private void onPropertyChanged(object sender, string propertyName)
{
if(this.PropertyChanged != null)
{
PropertyChanged(sender, new PropertyChangedEventArgs(propertyName));
}
}
}
Mein Verständnis ist, dass Bar wird nicht automatisch die Benutzeroberfläche aktualisiert, wenn foo modifiziert Was ist der richtige Weg, auf diese Weise
I verstehst du nicht, warum du es für besonders hässlich hältst, onPropertyChanged (das, "bar") zu feuern? Ich konnte es sehen, wenn .bar von 3 Eigenschaften abhängig war und Sie diesen Aufruf in allen drei Setter hatten ... aber dann konnte er die Berechnung aus dem Eigenschaft-Getter von .bar und in eine Berechnungsmethode verschieben, die das Update aufruft Methode. – Goblin
Es ist hässlich, weil Sie Logik platzieren, die für das richtige Verhalten der Eigenschaft B im Setter von Eigenschaft A erforderlich ist. Es kann eine beliebige Anzahl von Eigenschaften geben, die vom Wert von A abhängen. Sie müssen A ändern, um die Anforderungen anderer Eigenschaften zu erfüllen Diese Verwendung von A ist nicht naheliegend und nicht skalierbar. – dthorpe
Eine sauberere Lösung wäre eine Art zu zeigen, dass B von A abhängig ist und dass, wenn A sich ändert, B auch eine Wertänderung signalisieren sollte. Die zweite Option oben, um das eigene PropertyChanged-Ereignis anzuhören, ist in diesem Stil, aber das Zuhören Ihrer eigenen Events ist auch irgendwie kinky. – dthorpe