我的应用程序中有以下两个模型:
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”分支上有一个小型工作应用程序演示了这一点:
单击设置图标以更改单位,导航回开始页面,注意没有区别,然后使用刷新按钮刷新页面...