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

时间:2013-12-10 09:28:01

标签: nunit mvvmcross 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); }
   }
}

1 个答案:

答案 0 :(得分:1)

默认情况下,为了方便开发人员,MvvmCross将调用RaisePropertyChanged等调用到UI线程上。

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

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

如果在测试期间您想为UI线程编组提供模拟实现,那么请参阅http://mvvmcross.blogspot.co.uk/中的N = 29视频 - https://github.com/MvvmCross/NPlus1DaysOfMvvmCross/tree/master/N-29-TipCalcTest/TipCalcTest.Tests内有一些MockDispatcher代码< / p>