为了在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