2012-05-19 3 views
0

У меня есть класс, где есть некоторые свойства get;set;. И OnPropertyChange события, рассчитали дополнения всех этих get;set; объектов. Есть и другие свойства, которые просто имеют get; и возвращает calcuation простой, как:A Проблема, связанная с DataBinding с TextBlock

public Double D_F_Percent { 
    get { 
     return d_f/total; 
    }   
} 

Эти свойства связаны с TextBlocks. Первоначально значения отображаются как NaN. Но позже, когда я вводим значения для d_f, и он добавляется до toal в OnPropertyChanged.

Теперь, моя точка зрения заключается в том, как вычислить сумму, как я могу назвать это свойство и запустить его, чтобы он обновился в TextBlock?

ответ

2

Вы можете запустить PropertyChanged в любое время, и механизм привязки обновит пользовательский интерфейс.

Это не обязательно для того, чтобы сделать это в сеттер. Таким образом, в методе, в котором вы вычисляете total, просто поднимите мероприятие с вычисленным именем свойства D_F_Percent.

см в образце CalculateTotal метода:

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)); 
    } 
} 
+0

Благодаря @Nemesv, он делает работу отлично. Просто я использовал OnPropertyChanged везде вместо FirePropertyChanged. Надеюсь, это должно быть хорошо - я имею в виду не плохую идею. Кстати, что будет делать FirePropertyChange в cntrast для OnPropertyChanged? Мне пришлось добавить if() и вызвать CalculateTotal() в моем событии PropertyChanged. – Tvd

+0

Не имеет значения, как вы называете свой метод повышения рейса, 'OnPropertyChanged' также является хорошим именем, это просто вопрос личных предпочтений. – nemesv