2015-02-04 3 views
1

Кто-нибудь знает, как сделать представление таблицы iOS визуально повторно выбрать строку после обновления таблицы?MVVMCross iOS reselect table row after table refresh

Вот моя текущая реализация:

MainView

public override void ViewDidLoad() 
{ 
    base.ViewDidLoad(); 

    var source = new MvxSimpleTableViewSource(MainTableView, MainInspectionCell.Key, MainInspectionCell.Key); 
    MainTableView.Source = source; 
    var set = this.CreateBindingSet<MainView, MainViewModel>(); 
    set.Bind(source).To(vm => vm.Inspections); 
    set.Bind(source).For(s => s.SelectionChangedCommand).To(vm => vm.ItemSelectedCommand); 
    set.Bind(source).For(s => s.SelectedItem).To(vm => vm.SelectedInspection); 
.... 
    set.Apply(); 

    MainTableView.ReloadData(); 
} 

MainViewModel

У меня есть сообщение, которое получает разослано, когда синхронизация завершена и обрабатывается таким образом:

private async void OnSyncUpdate(UpdatedInspectionsMessage message) 
{ 
    var updatedInspections = await inspectionManager.GetInspectionsAsync(cancellationToken); 
    Inspections = new ObservableCollection<Inspection>(updatedInspections); 
    ItemSelectedCommand.Execute(SelectedItem); 
} 

Идея здесь быть .. когда синхронизация завершена и моя таблица обновляется, чтобы сделать выбор строки и повторно выделить элемент, который я выбрал. Что происходит прямо сейчас, так это то, что моя выбранная строка серая до обновления. После обновления мой SelectedItem все еще заполняется, но строка больше не серая.

Любые идеи?

ответ

1

Поэтому я получил это, чтобы опубликовать новое сообщение. Интересно, есть ли более чистый способ сделать это, но это работает для меня.

Когда я закончу мое обновление в моем ViewModel я делаю:

InvokeOnMainThread(async() => 
{ 
    await Task.Delay(250, cancellationToken); 
    ItemSelectedCommand.Execute(newSelected); 
    messenger.Publish(new DoneUpdatingInspectionsMessage(this)); 
}); 

Тогда в моей прошивке посмотреть я подписался на DoneUpdatingInspectionsMessage, который делает это:

var path = NSIndexPath.FromRowSection(MainViewModel.Inspections.IndexOf(MainViewModel.SelectedInspection), 0); 
MainTableView.SelectRow(path, true, UITableViewScrollPosition.None); 

Примечание: мне нужно построить задержка, потому что она срабатывала до того, как мой индикатор загрузки исчезнет, ​​что заставило строку не отобразиться как выбранная.