ListView.Behaviors和Prism DelegateCommand <t>问题

时间:2018-08-03 18:27:27

标签: xamarin.forms prism

经过数小时的搜索和尝试,我无法执行以下操作。

预期的行为:轻按一次列表中的项目,导航到页面。快速在同一项目上点击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的通用版本时,此代码有效。

如果有人可以指出我的意思,那我做错了,那太好了。谢谢。

0 个答案:

没有答案