Xamarin,如何从命令中获得完成状态?

问题描述

我有一个 ListView,正在使用 SelectedItem 调用命令并显示模式视图。

但是,我遇到了一个问题,即用户可以在列表视图行上多次点击,并且在加载视图之前会显示多个模式视图。当然,这只发生在速度较慢的设备上。

这是因为该命令没有任何回调。

我通常不会在这里粘贴代码,但在这种情况下,我认为提供屏幕截图更具描述性。

我研究了 AsyncCommands,但这些似乎更多地用于处理错误

我目前正在考虑退出模态时触发的订阅方法,但是我认为肯定有另一种我没有想到的方法

enter image description here

解决方法

您可以尝试使用 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;
}