У меня есть список, привязанный к свойству. Также есть событие загрузки "ListLoaded".
<ListView ScrollViewer.HorizontalScrollBarVisibility="Hidden" ScrollViewer.VerticalScrollBarVisibility="Hidden" BorderThickness="0" HorizontalAlignment="Left" ItemsSource="{Binding DoctorDetailsBooking,Mode=TwoWay}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Loaded">
<cmd:EventToCommand Command="{Binding ListLoaded}" PassEventArgsToCommand="True" />
</i:EventTrigger>
</i:Interaction.Triggers>
В событии загрузки я устанавливаю для первого выбранного элемента значение true и меняю цвет фона этого элемента.
Некоторые операции и вызовы API выполняются в конструкторе ViewModel. Событие загрузки также задается в конструкторе. Загрузка экрана занимает некоторое время. Поэтому я добавил весь код в конструктор на Фабрике задач и соответственно установил видимость индикатора выполнения.
Task tskOpen = Task.Factory.StartNew(() =>
{
ProgressBarVisibility = Visibility.Visible;
DataAccess data = new DataAccess();
DoctorDetailsBooking = data.GetDoctorsList(Convert.ToDateTime(BookingDate).Date);
FillSlots();
**ListLoaded = new RelayCommand<RoutedEventArgs>(ListViewLoaded);**
}).ContinueWith(t =>
{
ProgressBarVisibility = Visibility.Hidden;
}, TaskScheduler.FromCurrentSynchronizationContext());
Проблема в том, что когда я даю код внутри задачи, событие ListeViewLoaded не срабатывает. Следовательно, представление списка загружается неправильно. Если я удаляю часть кода Task, событие запускается, и все работает хорошо.
Я плохо знаю концепцию потоков и задач. Я что-то упустил здесь?
ListLoaded
будет установлена внутри задачи, поэтому я предлагаю вам переместить назначениеListLoaded
перед задачей. - person Grx70   schedule 04.02.2015