为了在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); }
}
}
答案 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>