Ein Problem im Zusammenhang mit DataBinding mit TextBlock
-
11-12-2019 - |
Frage
Ich habe eine Klasse, in der es welche gibt get;set;
Eigenschaften.Und OnPropertyChange
Ereignis, Additionen von all diesen berechnet haben get;set;
Eigenschaften.Es gibt andere Eigenschaften, die einfach vorhanden sind get;
und es gibt eine einfache Berechnung zurück wie:
public Double D_F_Percent {
get {
return d_f / total;
}
}
Diese Eigenschaften sind an TextBlocks gebunden.Zunächst werden die Werte als angezeigt NaN.Aber später, wenn ich Werte für eingebe d_f
, und es wird zur Gesamtsumme addiert OnPropertyChanged
.
Nun geht es mir darum, nach der Berechnung der Gesamtsumme diese Eigenschaft aufzurufen und auszulösen, damit sie im aktualisiert wird TextBlock
?
Lösung
Sie können das abfeuern PropertyChanged
jederzeit und die Bindungs-Engine aktualisiert die Benutzeroberfläche.
Es ist nicht erforderlich, dies in einem Eigenschaften-Setter zu tun.Also in der Methode, mit der Sie berechnen total
Lösen Sie einfach das Ereignis mit Ihrem berechneten Eigenschaftsnamen aus D_F_Percent
.
Siehe im Beispiel CalculateTotal
Methode:
public class ViewModel : INotifyPropertyChanged
{
private double d_f;
public double D_F
{
get { return d_f; }
set { d_f = value; FirePropertyChanged("D_F"); }
}
private double total;
public double Total
{
get { return total; }
set { total = value; FirePropertyChanged("Total"); }
}
public Double D_F_Percent
{
get { return d_f / total; }
}
public void CalculateTotal()
{
//Do some calculation set total
FirePropertyChanged("D_F_Percent");
}
public event PropertyChangedEventHandler PropertyChanged;
public void FirePropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}