gpt4 book ai didi

ios - 表格刷新后MVVMCross iOS重新选择表格行

转载 作者:行者123 更新时间:2023-11-29 12:28:55 25 4
gpt4 key购买 nike

有谁知道如何让 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com