Windows phone 7 如何刷新绑定属性,因为;无关的;当用户返回时是否更改?

Windows phone 7 如何刷新绑定属性,因为;无关的;当用户返回时是否更改?,windows-phone-7,data-binding,ivalueconverter,Windows Phone 7,Data Binding,Ivalueconverter,我的应用程序中有以下两种型号: public class AppSettings : INotifyPropertyChanged { private Units _mainUnits; // Units is an Enum. public Units MainUnits { get { return _mainUnits; } set { if (!_mainUnits != value) { _mainUnits = valu

我的应用程序中有以下两种型号:

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).
   [...]
}
然后在我的应用程序页面上,我有一个绑定到RideInstance属性的
TextBlock
,该属性使用
IValueConverter
,该转换器根据
main units
enum的值将
RideInstance
从米转换为公里或英里

骑乘
模型的值发生变化时,这可以正常工作,但是当用户更改设置页面上的AppSettings.MainUnit属性并导航“返回”到显示页面时,我希望刷新页面

例如:

  • 应用程序启动,页面加载,
    AppSettings.main单位
    ==Units.英制,
    RideDistance
    显示为“1.3英里”
  • 用户导航到设置页面,并将
    AppSettings.mainutis
    更改为Units.Metric
  • 用户按“后退”返回到第一页
  • 页面现在应将
    RideDistance
    列为
    2.1km
    ,但仍以英里为单位
  • 重新启动应用程序会产生所需的行为,就像显式导航到第一页一样,但使用“后退”按钮不会

    当用户使用“后退”按钮时,如何强制刷新绑定属性

    在我的FodyTest项目的“RefreshProperties”分支上有一个小的工作应用程序演示了这一点:

    单击“设置”图标更改单位,导航回起始页,注意无差异,然后使用“刷新”按钮刷新页面…

    有点肮脏的黑客行为: -将方法X()添加到Ride类,该类调用OnPropertyChanged(“RideInstance”); -在AppSettings.set_main单元中调用Ride.X()

    编辑:另一种有点脏的方法,它重新绑定页面的所有绑定: -在主页的OnNavigatedTo中,
    如果(e.NavigationMode==Back){DataContext=null;DataContext=myViewModel;}

    我想你是说“elided”?你能在某个地方上传一个复制程序吗?@Simon-更新了链接到。是的,我考虑过类似的事情,我也考虑过挂接主机的更改事件并调整Ride的值,但是有几个属性受此影响,还有几个页面会发生这种情况(可能会引起一些闪烁):在主页的OnNavigatedTo中,如果(e.NavigationMode==Back){DataContext=null;DataContext=myViewModel;}嗯,刚刚在注释中尝试了这个选项,它似乎起作用了-闪烁(如果有的话)被过渡动画隐藏(至少在模拟器上,我需要部署到我的手机上才能真正确认)-如果你在回答中包含这一点,那么至少会有一个向上投票;)