2016-08-17 7 views
1

私はXamarinフォームでポップアップしているリストビューを持っています。誰かがボックスの外をタップすると非表示にしたいのです。私はそれを処理するリストビューの親レイアウト上にタップジェスチャ認識プログラムを持っています。 Androidでは、すべてうまくいきます。クリックすると閉じますが、リストビューで要素をクリックすると、要素が正しく選択されます。 iOSでは、逆のことが起こります。レイアウト上のジェスチャハンドラが最初に起動し、項目を適切に選択せずにリストビューを閉じます。Xamarinのイベントハンドラの注文

私の質問ですが、イベントの発動順序を変更する方法はありますか?そうでない場合は、これを達成しようとしている方法に対して、より良い選択肢がありますか?ありがとう!

答えて

1

ListView.ItemSelectedまたはListView.ItemTappedを使用している場合は、先日同じ問題が発生しました。私のための解決策は、それらのいずれかを使用せず、代わりにListView内のViewCellTapGestureRecognizerを添付することでした。 ViewCellがバインドされているオブジェクトにIsSelectedプロパティを追加して、クリックしたアイテムの背景色を変更できるようにしました。

public class SomePage : ContentPage { 

    private SomeModel _selectedModel; //It would be best to put this into your ViewModel 

    ... 

    public SomePage() { 

     ListView list = new ListView { 
      ItemTemplate = new DataTemplate(() => { 
       ViewCell cell = new ViewCell { 
        View = new ContentView() 
       }; 

       cell.View.GestureRecognizers.Add(new TapGestureRecognizer { 
        Command = new Command(() => { 
         if(_selectedModel != null) { _selectedModel.IsSelected = false; } 

         SomeModel model = (SomeModel)cell.BindingContext; 

         model.IsSelected = true; 
         _selectedModel = model; 
        }) 
       } 

       return cell; 
      } 
     } 
    } 
} 
+0

私はGestureRecognizerで追加できるようになる前に、この解決策はうまくいきましたが、cell.Viewを設定する必要がありました。だから私はちょうどcell.View = new ContentViewのようなことをしなければならなかった。 { コンテンツ=ラベル、 パディング=新しい厚さ(10、0) };ジェスチャー認識機能を追加する前に – Arthurdent510

関連する問題