Моя модель представления такова.
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 устраняет проблему и почему ее не требуется во 2-м блоке кода вверху, только с Console.WriteLine?