Prism PubSubEvent订阅不适用于某些代码

时间:2019-02-14 15:43:53

标签: c# prism

我的视图模型是这个。

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可以解决此问题?

0 个答案:

没有答案