Команда ретрансляции с использованием внедренной службы данных не вызывается

Когда я использую внедренный экземпляр службы данных в операторе 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), которая инициализируется в конструкторе, решило дилемму.

Другие вопросы по тегам