2016-06-29 18 views
3

こんにちはXamarin Forms ListViewを使用しています。特定のバインディングまたはコードの背後にあるコンテキストアクションを無効にできるかどうかを知りたいと思います。条件に基づいてViewCell.ContextActionsを無効にすることはできますか

私はアプリケーション全体で1つのGroupedListViewを使用していますが、ユーザーが行っていることに基づいて異なるデータを表示します。ユーザーがiOSでスワイプしたりアンドロイドを長押ししてListItemを削除したい場合は「お気に入りを管理する」機能がありますが、リストにいくつかの検索が表示されている場合はこの動作が望ましくありません結果や他の何か

<ViewCell.ContextActions> 
    <MenuItem Text="Delete" IsDestructive="true" CommandParameter="{Binding .}" Command="{Binding Path=BindingContext.OnDeleteCommand, Source={x:Reference Name=ListViewPage}}"/> 
</ViewCell.ContextActions> 

は、これはどのように私はContextActionsを無効にすることができ

...

<ViewCell.ContextActions IsEnabled="false"> //This IsEnabled does nothing 
    <MenuItem Text="Delete" IsDestructive="true" CommandParameter="{Binding .}" Command="{Binding Path=BindingContext.OnDeleteCommand, Source={x:Reference Name=ListViewPage}}"/> 
</ViewCell.ContextActions> 
それを無効にしませんでしたか?私はユーザーがいつもスワイプできるようにしてもらえません。

答えて

5

...そのリスト項目の種類

private void OnBindingContextChanged(object sender, EventArgs e) 
{ 
    base.OnBindingContextChanged(); 

    if (BindingContext == null) 
     return; 

    ViewCell theViewCell = ((ViewCell)sender); 
    var item = theViewCell.BindingContext as ListItemModel; 
    theViewCell.ContextActions.Clear(); 

    if (item != null) 
    { 
     if (item.ListItemType == ListItemTypeEnum.FavoritePlaces 
      || item.ListItemType == ListItemTypeEnum.FavoritePeople) 
     { 
      theViewCell.ContextActions.Add(new MenuItem() 
      { 
       Text = "Delete" 
      }); 
     } 
    } 
} 

ベースの背後にあるコードでXAML

<ViewCell BindingContextChanged="OnBindingContextChanged"> 

我々は対処している、我々はコンテキストアクションを配置する場所を決定することになる

4

これについてはいくつかの方法があります。

  1. はあなたの条件に基づいてMenuItemフォームContextActionsを削除することができます。純粋なXAMLではこれを行うことはできません。コードビハインドを行う必要があります。
  2. もう1つの方法はDataTemplateSelectorです。これにより、実行時にViewCell(またはCells)のテンプレートを選択できます。そのテンプレートでは、ContextActionsを追加するかどうかを選択できます。私は次のようでした達成するために何を望むかについては
+1

ありがとう、私はDataTemplateSelectorを調べ、私の問題の良い解決策のように見えます。私はViewCellで 'BindingContextChanged'を使ってこれを行う別の方法を見つけました – stepheaw

-2

単にセルを無効にするだけですが、AndroidではiOSでは使用できません。 iOSとAndroidの両方でXamarin Forms(2.0.5782)プロジェクトでテストされています。

<ViewCell IsEnabled="false"> 

サンプルにあるように、ViewCellであり、ViewCell.ContextActionsではありません。

+1

しかし、チェックする条件があるので、それを無効にすることはできません – user3841581

関連する問題