2017-03-02 2 views
1

목록보기 컨트롤 내부의 프레임에 TapGesture에 명령을 바인딩하려고합니다. 프레임은 목록보기에 대한 데이터 템플릿 내부에 정의됩니다.명령 바인딩이 Xamarin Forms의 Listview 내에서 작동하지 않습니다.

<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는 viewmodel 클래스에 정의되어 있습니다. 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"); 
} 
관련 문제