2015-02-04 2 views
1

iOS 테이블 뷰를 테이블을 새로 고친 후 시각적으로 행을 다시 선택하는 방법을 아는 사람이 있습니까? 여기 MVVMCross iOS 테이블 새로 고침 후 테이블 행을 다시 선택하십시오.

내 현재의 구현 :

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에 내 새로 고침을 완료하면

나는 수행

내 아이폰 OS에서 다음
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); 

참고 : I가 필요 로드 표시기가 사라지기 전에 발사 중이기 때문에 딜레이가 생겨서 선택한 행이 표시되지 않습니다.

관련 문제