2012-05-19 3 views
0

나는 get;set; 속성을 가진 클래스가 있습니다. OnPropertyChange 이벤트의 경우 해당 속성이 모두 get;set; 인 추가 된 항목이 계산되었습니다. 은 get;있는 다른 호텔을 고를 수 있습니다과 같은 단순 calcuation를 반환A TextBlock을 사용한 데이터 바인딩과 관련된 문제

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

가 이러한 속성은 TextBlocks에 바인딩됩니다. 처음에는 값이 NaN으로 표시됩니다. 그러나 나중에 d_f에 대한 값을 입력하면 OnPropertyChanged에 toal이 추가됩니다.

내 포인트는 총계를 계산 한 후이 속성을 호출하고 화재로 인해 어떻게 TextBlock에서 새로 고쳐 지나요?

답변

2

언제든지 PropertyChanged을 실행할 수 있으며 바인딩 엔진이 UI를 업데이트합니다.

속성 설정 도구에서 수행 할 필요는 없습니다. 따라서 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, 그것은 완벽하게 작업을 수행합니다. FirePropertyChanged 대신 OnPropertyChanged를 사용했습니다. 괜찮을 것입니다. 나쁜 생각은 아닙니다. BTW, FirePropertyChange는 OnPropertyChanged에 비해 무엇을 할 것인가? if()를 추가하고 CalculateTotal()을 PropertyChanged 이벤트에 호출해야했습니다. – Tvd

+0

이벤트 라이저 메소드를 호출하는 방법은 중요하지 않습니다. 'OnPropertyChanged' 또한 개인적인 취향에 맞는 좋은 이름입니다. – nemesv

관련 문제