问题描述
我有一个 ListView,正在使用 SelectedItem 调用命令并显示模式视图。
但是,我遇到了一个问题,即用户可以在列表视图行上多次点击,并且在加载视图之前会显示多个模式视图。当然,这只发生在速度较慢的设备上。
这是因为该命令没有任何回调。
我通常不会在这里粘贴代码,但在这种情况下,我认为提供屏幕截图更具描述性。
我研究了 AsyncCommands,但这些似乎更多地用于处理错误。
我目前正在考虑退出模态时触发的订阅方法,但是我认为肯定有另一种我没有想到的方法。
解决方法
您可以尝试使用 Boolean as IsSelected
并在用户单击列表中的项目时使 IsSelected
为真并在 setter 中更改您的条件,如下所示。操作完成后重置标志。
这是,不会有任何模态重复。这是我从你的问题中了解到的,如果还有其他问题,请告诉我。
if( _locationAssetSelected || !IsSelected )
{
IsSelected = true;
_locationAssetSelected = value;
..... //your code
_locationAssetSelected = null;
IsSelected = false;
}
,
您可以将逻辑移到命令中以确保它不会多次执行。这是使用此方法作为命令的示例/模板表单应用程序上的一个片段。锁似乎没有必要。
async void OnItemSelected(Item item)
{
//lock (selectLock)
//{
if (item == null || selectionOn)
return;
selectionOn = true;
//}
System.Diagnostics.Debug.WriteLine($"{item.Text} selected");
// This will push the ItemDetailPage onto the navigation stack
await Shell.Current.GoToAsync($"{nameof(ItemDetailPage)}?{nameof(ItemDetailViewModel.ItemId)}={item.Id}");
selectionOn = false;
}