我的视图模型是这个。
private string _currentModel;
public string CurrentModel
{
get { return _currentModel; }
set { SetProperty(ref _currentModel, value); }
}
public StatsViewModel(IEventAggregator eventAggregator, ITester tester)
{
_eventAggregator = eventAggregator;
_eventAggregator.GetEvent<PubSubEvent<ProductChanged>>().Subscribe(x =>
{
CurrentModel = x.Product.Name;
GetProductStats(x.Product.Id, tester.TesterInfo.Id);
}, ThreadOption.UIThread);
}
运行此命令时,订阅中的代码无法执行。
因此,我随后将其保持简单并更改为此。
_eventAggregator.GetEvent<PubSubEvent<ProductChanged>>().Subscribe(x =>
{
Console.WriteLine("");
}, ThreadOption.UIThread);
这很好。然后,我开始重新添加原始代码,并添加了CurrentModel变量的分配,但保持了这种简单性。
_eventAggregator.GetEvent<PubSubEvent<ProductChanged>>().Subscribe(x =>
{
CurrentModel = "Test";
}, ThreadOption.UIThread);
这不起作用。任何想法为什么这不起作用?
更新: 因此,我修改了代码并将“ keepSubscriberReferenceAlive”选项设置为true。现在一切似乎都正常了。
_eventAggregator.GetEvent<PubSubEvent<ProductChanged>>().Subscribe(x =>
{
CurrentModel = x.Product.Name;
GetProductStats(x.Product.Id, tester.TesterInfo.Id);
}, ThreadOption.UIThread, true); // <----- added true
有什么主意为什么添加true可以解决此问题,以及为什么在顶部的第二个代码块中仅使用Console.WriteLine可以解决此问题?