2017-03-02 8 views
1

リストビューコントロール内のフレームにTapGestureにコマンドをバインドしようとしています。フレームは、リストビューのデータテンプレート内で定義されます。 viewmodelクラスで定義されてコマンドバインディングがXamarinフォームのリストビュー内で機能しない

ここ
<ListView x:Name="listView" 
        ItemsSource="{Binding LstSrc}"      
        RowHeight="75" > 
      <ListView.ItemTemplate> 
       <DataTemplate> 
       <ViewCell> 
        <Grid Margin="0" 
         Padding="0" 
         BackgroundColor="White">     
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="1*"/> 
         <ColumnDefinition Width="1*"/>       
        </Grid.ColumnDefinitions> 
        <Frame Grid.Column="0" BindingContext="{Binding Item1}" 
         Margin="0" Padding="0" x:Name="f1"> 
         <Frame.GestureRecognizers> 
         <TapGestureRecognizer Command="{Binding BindingContext.GoToPageCommand, Source={x:Reference this}}" 
               CommandParameter="{Binding BindingContext.Id, Source={x:Reference f1}}"/> 
         </Frame.GestureRecognizers> 
         </Frame>      
        </Grid> 
       </ViewCell> 
       </DataTemplate> 
      </ListView.ItemTemplate> 
      </ListView> 

LstSrcとGoToPageCommand AE。 Item1はLstSrc内で定義されています。ビューモデルの中で定義され

委任コマンドは

public DelegateCommand<TappedEventArgs> GoToPageCommand => new DelegateCommand<TappedEventArgs>(
      async s => {        
       await _navigationService.NavigateAsync("NextPage");    
      }); 

である。しかし、タッピングに、制御コマンド方式に来ていません。

+0

バインディングにBindingContextを指定する必要はありません。デバッグ出力ウィンドウを見ると、おそらくバインディングエラーが発生します。バインディングパスのBindingContextを使わずにGoToPageCommandにバインドしてみてください。 –

答えて

0

このソリューションはバインディングを使用しませんが、別のアプローチをとっても問題ありません。

<Frame.GestureRecognizers> 
     <TapGestureRecognizer 
       Tapped="OnFrameClicked" 
       NumberOfTapsRequired="1" /> 
</Frame.GestureRecognizers> 

void async OnFrameClicked(object sender, EventArgs args) 
{ 
    await _navigationService.NavigateAsync("NextPage"); 
} 
関連する問題