2017-06-09 5 views
0

私はXamarin Formsアプリケーションのページに2つのエントリを持っています。これらの2つのエントリのTextプロパティは、realmオブジェクトでバインドされています。これは双方向のバインディングなので、これらのフィールドのいずれかに値を入力するたびに、レルムオブジェクトは更新され、その逆もあります。これはうまく動作します。他のトリガーをバインドするプロパティ

しかし、ユーザーが1つのエントリで値を変更すると、別のエントリの値も再計算して更新する必要があります。単位変換(例えば、mm-inch)の2つのエントリを持つようなものです.mm値を変更すると、他のフィールドのインチ値が更新され、その逆もあります。どのようにこの動作を達成できますか?あなたはMVVMパターンを以下しているようですね

<Label Text="Speed" /> 
<Entry x:Name="SpeedEntry" Text="{Binding Speed, Mode=TwoWay}" /> 
<Label Text="Depth" /> 
<Entry x:Name="DepthEntry" Text="{Binding Depth, Mode=TwoWay}" /> 
+0

Xamarin.Formsのトリガをご覧ください。https://developer.xamarin.com/guides/xamarin-forms/application-fundamentals/triggers/ – Cheesebaron

答えて

0

(何をやっていることはどのように、なぜそれを使用するための一例ですので、あなたは、必要がありません包み)

私がお勧めの量を減らすFody.PropertyChanged含む( - 他の人の多くがある - それはコードの再利用(プロジェクト間のプラットフォームと可能性間で)それを行うの

一つの方法は、次のコードスニペットでの機会が増加するのでViewModelで計算を置きます配管コードが必要)、Reactive.UI(リアクティブプログラミング用 - また配管工事を減らす)と同様のライブラリ。

using System.ComponentModel; 
using System.Runtime.CompilerServices; 

public class ConversionViewModel : INotifyPropertyChanged 
{ 

    private double depth; 

    private double speed; 

    public double Speed { 
     get { return this.speed; } 
     set { 
      this.speed = value; 
      this.OnPropertyChanged(); 
      this.Depth = this.CalculateDepth(); 
     } 
    } 

    public double Depth { 
     get { return this.depth; } 
     set { 
      this.depth = value; 
      this.OnPropertyChanged(); 
      this.Speed = this.CalculateSpeed(); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    private double CalculateSpeed() 
    { 
     // do your calculation 
     return 0; 
    } 

    private double CalculateDepth() 
    { 
     // do your calculation 
     return 0; 
    } 

    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) 
    { 
     this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 
    } 

} 

実際に必要なときに計算をプロパティゲッターに移動して実行することができます。相対的なCPU集約的な計算の場合は、結果をフィールドにキャッシュし、一部のプロパティが変更されたときにその値を無効にすることをお勧めします。

関連する問題