有谁知道如何让 iOS 表格 View 在表格刷新后可视化地重新选择一行?
这是我当前的实现:
主视图
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();
}
主视图模型
我有一条消息会在同步完成后发送出去,处理方式如下:
private async void OnSyncUpdate(UpdatedInspectionsMessage message)
{
var updatedInspections = await inspectionManager.GetInspectionsAsync(cancellationToken);
Inspections = new ObservableCollection<Inspection>(updatedInspections);
ItemSelectedCommand.Execute(SelectedItem);
}
这里的想法是......当同步完成并且我的表格刷新以进行行选择并重新突出显示我选择的项目时。现在发生的是我选择的行在刷新之前是灰色的。刷新后,我的 SelectedItem 仍处于填充状态,但该行不再是灰色。
有什么想法吗?
最佳答案
所以我通过发布一条新消息来让它工作。我想知道是否有更简洁的方法来执行此操作,但这对我有用。
当我在 ViewModel 中完成刷新时,我会执行以下操作:
InvokeOnMainThread(async () =>
{
await Task.Delay(250, cancellationToken);
ItemSelectedCommand.Execute(newSelected);
messenger.Publish(new DoneUpdatingInspectionsMessage(this));
});
然后在我的 iOS View 中,我订阅了一个 DoneUpdatingInspectionsMessage 来执行此操作:
var path = NSIndexPath.FromRowSection(MainViewModel.Inspections.IndexOf(MainViewModel.SelectedInspection), 0);
MainTableView.SelectRow(path, true, UITableViewScrollPosition.None);
注意:我需要构建一个延迟,因为它在我的加载指示器消失之前触发,这导致该行未显示为选中状态。
关于ios - 表格刷新后MVVMCross iOS重新选择表格行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28333248/