经过数小时的搜索和尝试,我无法执行以下操作。
预期的行为:轻按一次列表中的项目,导航到页面。快速在同一项目上点击2-3次(或更多),但仍打开一个页面,而没有更多内容。
我已经设法做到了,但是当使用通用的DelegateCommand时,由于某种原因它将无法工作。 我正在使用Xamarin.Forms(版本3.1.0.637273)和Prism(版本7.1.0.172-pre)。
在我的XAML中,我具有一个具有以下行为和绑定的ListView:
<ListView
CachingStrategy="RecycleElement"
ItemsSource="{Binding MyCollection}">
<ListView.Behaviors>
<b:EventToCommandBehavior
Command="{Binding MyCommand}"
EventName="ItemTapped"
EventArgsParameterPath="Item" />
</ListView.Behaviors>
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
...
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
在我的ViewModel中,我有:
private ObservableCollection<SomeModel> _myCollection;
public ObservableCollection<SomeModel> MyCollection
{
get { return _myCollection; }
set { SetProperty(ref _myCollection, value); }
}
private bool _canNavigate;
public bool CanNavigate
{
get { return _canNavigate; }
set { SetProperty(ref _canNavigate, value); }
}
private DelegateCommand<SomeModel> _myCommand;
public DelegateCommand<SomeModel> MyCommand =>
_someModel ?? (_myCommand = new DelegateCommand<SomeModel>(ExecuteMethod, (parameter) => CanNavigate))
.ObservesProperty(() => CanNavigate);
private async void ExecuteMethod(SomeModel parameter)
{
CanNavigate = false;
NavigationParameters parameters = new NavigationParameters($"?id={parameter.Id}");
await NavigationService.NavigateAsync("SomeCoolPage", parameters);
CanNavigate = true;
}
例如,我也尝试过其他变体而没有运气:
private async void ExecuteCommand()
{
if(CanNavigate)
{
CanNavigate = false;
...
...
CanNavigate = true;
}
}
当我不使用DelegateCommand的通用版本时,此代码有效。
如果有人可以指出我的意思,那我做错了,那太好了。谢谢。