2017-03-03 24 views
1

我們正在使用Template10開發UWP應用程序。該應用程序正確顯示成本,淨值,稅率和總計。 Tax和Total是ViewModel中的計算屬性。但是,當ViewModel中的Net更新時,在ViewModel中更新了Tax和Total,但在View中未更新。 XAML中:在UWP中只讀計算的屬性在視圖中未更新

<TextBlock 
    Text="{x:Bind ViewModel.Net,Mode=OneWay}" 
/> 
<TextBlock 
    Text="{x:Bind ViewModel.Tax,Mode=OneWay}" 
/> 
<TextBlock 
    Text="{x:Bind ViewModel.Total,Mode=OneWay}" 
/> 

視圖模型:

public class ViewModel : ViewModelBase 
{ 
     decimal? _Net = default(decimal?); 
     public decimal? Net 
     { 
      get 
      { 
       return _Net; 
      } 
      set 
      { 
       if (value == 0) value = null; 
       Set(ref _Net, value); 
      } 
     } 

     decimal? _TaxRate = default(decimal?); 
     public decimal? TaxRate { get { return _TaxRate; } set { Set(ref _TaxRate, value); } } 

     public decimal? Tax 
     { 
      get 
      { 
       return TaxRate/100 * Net; 
      } 
     } 

     public decimal? Total { get { return Net + Tax; } } 

我們在視圖模型的命令編輯淨

DelegateCommand _SetDiscount; 
public DelegateCommand SetDiscount 
     => _SetDiscount ?? (_SetDiscount = new DelegateCommand(() => 
     { 
    // for simplicity deleted calculations for the newNet 
      this.Net = newNet ?? 0; 
},() => true)); 

網,稅務和道達爾在視圖模型是正確更新。 Net在視圖中正確更新。爲什麼稅收和總計不在視圖中更新?

+1

你在哪裏上升性稅率和總額的變化?我認爲在Set(ref _Net,value)之後;''應該有'RaisePropertyChanged(nameof(Tax)); RaisePropertyChanged(nameof(總計));'。 – Romasz

+0

偉大的問題@Romasz。我如何使用計算屬性來做到這一點? ......哎呦......剛剛得到你的編輯。 – Vague

+0

我編輯了第一條評論。你有公共/保護/內部方法負責提高財產變更,或只有'Set()'? – Romasz

回答

2

它們未在查看更新因爲您沒有通知它有關更改。您Set()方法具有RaisePropertyChanged(string)方法(或類似的東西調用的PropertyChanged事件),因此正在顯示您的Net值的變化裏面,只是在Net二傳手變化信息添加了其他兩個:

public decimal? Net 
{ 
    get 
    { 
     return _Net; 
    } 
    set 
    { 
     if (value == 0) value = null; 
     Set(ref _Net, value); 
     RaisePropertyChanged(nameof(Total)); 
     RaisePropertyChanged(nameof(Tax)); 
    } 
}