Команда ретрансляции с использованием внедренной службы данных не вызывается
Когда я использую внедренный экземпляр службы данных в операторе lambda, который определяет обработчик команды relay, этот обработчик никогда не вызывается (он связан с кнопкой). Когда я объявляю экземпляр службы данных в лямбде, она работает нормально. Есть идеи?
Отредактировано: создал переменную класса _dataService и инициализировал ее в конструкторе модели представления. Используйте переменную класса в обработчике реле и все работает.
private IDataService _dataService;
public MainViewModel(IDataService dataService)
{
_dataService = dataService;
Batches = new ObservableCollection<Batch>();
#region RefreshCommand
RefreshCommand = new RelayCommand(
() =>
{
var t1 = Task<ObservableCollection<Batch>>.Factory.StartNew(() =>
{
// WHEN I UNCOMMENT AND COMMENT OUT BELOW, WORKS FINE.
//DataService test = new DataService();
//ObservableCollection<Batch> batches = test.GetBatchesToProcess();
//
// THIS NOW WORKS.
return _dataService.GetBatchesToProcess();
});
try
{
t1.Wait();
}
catch (AggregateException ae)
{
foreach (var e in ae.InnerExceptions)
{
if (e is SqlException)
{
MessageBox.Show("Sql Exception: " + e.Message);
}
else
{
MessageBox.Show("Unexpected error: " + e.Message);
}
}
return;
}
Batches = t1.Result;
}
);
#endregion
}
1 ответ
Использование параметра dataService для конструктора MainViewModel не работало в обработчике команд реле. Использование закрытой переменной класса (_dataService), которая инициализируется в конструкторе, решило дилемму.