2016-08-14 11 views
3
でのC#への結合フォーム

I以下のXAMLは、私の見解モデルでdeleteコマンドにバインドする作業があります。私は、私はプログラム的に使用することができますC#に変換しようとしているXamarinは、XAML ContextActionがViewCell

 <TextCell.ContextActions> 
      <MenuItem Command="{Binding Path=BindingContext.DeleteCollectionCommand, Source={x:Reference Name=CollectionListView}}" 
        CommandParameter="{Binding .}" 
        Text="Delete" 
        IsDestructive="True" /> 
     </TextCell.ContextActions> 

それ。

私は以下を試しましたが、機能しません。何を変更する必要がありますか? ViewModel DeleteCommandにアクセスするためのより良い/異なる方法がありますか?

protected override void OnBindingContextChanged() 
    { 
     base.OnBindingContextChanged(); 

     var deleteAction = new MenuItem { Text = "Delete", IsDestructive = true }; // red background 
     deleteAction.SetBinding(MenuItem.CommandParameterProperty, new Binding(".")); 
     deleteAction.SetBinding(MenuItem.CommandProperty, 
      new Binding("BindingContext.DeleteCommand", BindingMode.Default, null, null, null, "{x:Reference Name=CollectionBeerListView}")); 

     ContextActions.Add(deleteAction); 
    } 

EDIT私は親ビューからこのようなセルをSKÄRの答えを組み合わせると、初期化することによって、この作業を取得することができました

 lstView.ItemTemplate = new DataTemplate(() => 
     { 
      var cell = new DeleteGenericListItemTemplate(page); 
      return cell; 
     }); 

これが理想的であるかどうかわかりません。私は動いています。

+1

まあ、私がやりますバインディングスローを行う方法を知らないXamlを使用したC#ははるかに簡単でストレートです。これは私が見た最も奇妙なバインディングだと言います。 私はあなたの質問の第2部分を手伝ってくれます。 ビューモデルで必要なプロパティに到達するには、BindingContext = new(your_ViewModel)を設定する必要があります。これを行うと簡単にバインドできます。 コードビハインドとXamlの多くを共有して、より良いお手伝いをすることができますか?なぜXamlの代わりにC#でそれをやりたいのですか? – BraveHeart

+0

私はC#からそれをやっている理由は、削除アクションをプログラムで表示/非表示する必要があります。これは私が複数の場所で使用しているGeneric View Cellです。 – aherrick

+0

ビューモデルのコンテキスト内からView Modelの "Delete Command"にアクセスする必要があります。 – aherrick

答えて

1

あなたはページのバインディング・コンテキストを通して、あなたのViewModelにごDeleteCommandのにアクセスできるようにする必要があり、あなたのページを参照して、以下のようなものを作成するには、テキストのセルに拡張する場合:

public class CustomCell: TextCell 
{ 
     public CustomCell(Page page) 
     { 
      var deleteAction = new MenuItem { Text = "Delete", IsDestructive = true }; // red background 
      deleteAction.SetBinding(MenuItem.CommandParameterProperty, new Binding(".")); 
      deleteButton.SetBinding (MenuItem.CommandProperty, new Binding ("BindingContext.DeleteCommand", source: page)); 
      ContextActions.Add(deleteAction); 


     } 
} 
+0

お返事ありがとうございます。私は実際に "Page"オブジェクトを渡す必要がありますか?もしそうなら、XAMLからこの変数を渡してこのカスタムセルを呼び出す方法は? – aherrick

+0

あなたは私の考えの背後にあるコードを使用する必要があります。ちょうど新しい編集のようにあなたのポストに入れました。 – skar

関連する問題