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;
});
これが理想的であるかどうかわかりません。私は動いています。
まあ、私がやりますバインディングスローを行う方法を知らないXamlを使用したC#ははるかに簡単でストレートです。これは私が見た最も奇妙なバインディングだと言います。 私はあなたの質問の第2部分を手伝ってくれます。 ビューモデルで必要なプロパティに到達するには、BindingContext = new(your_ViewModel)を設定する必要があります。これを行うと簡単にバインドできます。 コードビハインドとXamlの多くを共有して、より良いお手伝いをすることができますか?なぜXamlの代わりにC#でそれをやりたいのですか? – BraveHeart
私はC#からそれをやっている理由は、削除アクションをプログラムで表示/非表示する必要があります。これは私が複数の場所で使用しているGeneric View Cellです。 – aherrick
ビューモデルのコンテキスト内からView Modelの "Delete Command"にアクセスする必要があります。 – aherrick