2017-03-03 6 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}" 
/> 

のViewModelは:

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)); 

ネット、税および合計が正しくのViewModelにネットに更新されている編集のViewModelでコマンドを持っています。ネットはビューで正しく更新されます。ビューでTaxとTotalが更新されないのはなぜですか?

+1

:あなたのSet()方法は、ので、あなたのNet値の変更だけで、他の2のためのNetセッター変更情報に追加し、表示されている(イベントにPropertyChanged を呼び出すか、似たような)RaisePropertyChanged(string)メソッドの内部で持っています税金と合計の変更?私は 'Set(ref _Net、value);の後に' RaisePropertyChanged(nameof(Tax));を持たなければならないと思います。 RaisePropertyChanged(nameof(Total)); '。 – Romasz

+0

大きな質問@Romasz。計算されたプロパティでそれをどうやって行うのですか? ... whoops ...あなたの編集をちょうど得ました。 – Vague

+0

私は最初のコメントを編集しました。プロパティの変更を行うpublic/protected/internalメソッドか、 'Set()'のみを持っていますか? – Romasz

答えて

2

の表示では、変更について通知していないため、これらは更新されていません。あなたが財産を上昇している

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