使用MvxNotifyPropertyChanged作为实现INotifyPropertyChanged的替代品是否安全



为了在NUnit测试中激发PropertyChanged,我必须设置ShouldAlwaysRaiseInpcOnUserInterfaceThread(false)。当我稍后将该类用作ViewModel时,是否会对此产生任何影响?也许我应该在NUnit中设置一个用户界面线程?帮助

public interface ISomething : INotifyPropertyChanged
{
}
public class Something : MvxNotifyPropertyChanged, ISomething
{
   public Something()
   {
      ShouldAlwaysRaiseInpcOnUserInterfaceThread(false);
   }
   private int _num;
   public int Num
   {
      get { return _num; }
      set { if (_num != value) { _num = value; RaisePropertyChanged(() => Num); }
   }
}

默认情况下,MvvvmCross会将类似RaisePropertyChanged的调用封送至UI线程,以方便开发人员。

如果要在单个对象上禁用此功能,可以为该对象调用ShouldAlwaysRaiseInpcOnUserInterfaceThread(false);(这是一个方法调用,而不是属性,因为ViewModel对象上的属性通常保留给INotifyPropertyChanged使用)

如果您想在所有对象上默认禁用此功能,则可以使用Mvx.Resolve<IMvxSettings>().AlwaysRaiseInpcOnUserInterfaceThread = false;

如果在测试过程中,您希望为UI线程编组提供一个模拟实现,请参阅中的N=29视频http://mvvmcross.blogspot.co.uk/-里面有一些MockDispatcher代码https://github.com/MvvmCross/NPlus1DaysOfMvvmCross/tree/master/N-29-TipCalcTest/TipCalcTest.Tests

相关内容

  • 没有找到相关文章

最新更新