アプリには次の 2 つのモデルがあります。
public class AppSettings : INotifyPropertyChanged
{
private Units _mainUnits; // Units is an Enum.
public Units MainUnits {
get { return _mainUnits; }
set {
if (!_mainUnits != value) {
_mainUnits = value;
this.OnPropertyChanged("MainUnits");
}
}
}
// Standard PropetyChanged event, etc. elided (using NotifyPropertyWeaver).
[...]
}
public class Ride : INotifyPropertyChanged
{
private double _rideDistance;
public double RideDistance {
get { return _rideDistance; }
set {
if (!_rideDistance != value) {
_rideDistance = value;
this.OnPropertyChanged("RideDistance");
}
}
}
// Standard PropetyChanged event, etc. elided (using NotifyPropertyWeaver).
[...]
}
次に、アプリケーション ページで、列挙型の値に応じてメートルからキロメートルまたはマイルに変換するTextBlock
を使用する RideDistance プロパティにバインドします。IValueConverter
RideDistance
MainUnits
これは、Ride
モデルの値が変更されると正常に機能しますが、ユーザーが設定ページで AppSettings.MainUnit プロパティを変更し、表示ページに「戻る」ときにページを更新したいと考えています。
例えば:
- アプリの起動、ページの読み込み、
AppSettings.MainUnits
== Units.Imperial、RideDistance
「1.3 マイル」と表示されます。 - ユーザーは [設定] ページに移動し、
AppSettings.MainUntis
Units.Metric に変更します。 - ユーザーは「戻る」を押して最初のページに戻ります。
- ページは
RideDistance
として2.1km
表示されるようになりましたが、まだマイルで表示されています。
アプリを再起動すると、最初のページに明示的に移動する場合と同様に目的の動作が得られますが、戻るボタンを使用するとそうではありません。
ユーザーが [戻る] ボタンを使用したときに、バインドされたプロパティを強制的に更新するにはどうすればよいですか?
私の FodyTest プロジェクトの「RefreshProperties」ブランチには、これを示す小さな実用的なアプリがあります。
設定アイコンをクリックして単位を変更し、開始ページに戻りますが、違いに気付かず、更新ボタンを使用してページを更新します...