Ich habe folgende XAML meiner Ansicht nach Modell auf einen Löschbefehl zu binden arbeiten:Xamarin Forms XAML ContextAction zu C# Bindung in ViewCell
<TextCell.ContextActions>
<MenuItem Command="{Binding Path=BindingContext.DeleteCollectionCommand, Source={x:Reference Name=CollectionListView}}"
CommandParameter="{Binding .}"
Text="Delete"
IsDestructive="True" />
</TextCell.ContextActions>
Ich versuche, es zu C# zu konvertieren, so kann ich programmatisch verwenden es.
Ich habe Folgendes versucht, aber es funktioniert nicht. Was muss geändert werden? Gibt es eine bessere/andere Möglichkeit, auf das ViewModel DeleteCommand zuzugreifen?
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
ich in der Lage war, diese Funktion zu erhalten, indem skar Antwort und Initialisieren der Zelle wie dies von der übergeordneten Ansicht kombiniert:
lstView.ItemTemplate = new DataTemplate(() =>
{
var cell = new DeleteGenericListItemTemplate(page);
return cell;
});
nicht sicher, ob dies ideal ist. aber hält mich in Bewegung.
Nun, ich tun nicht wissen, wie man einen verbindlichen Wurf macht C# mit Xaml ist viel einfacher und direkter und ich muss sagen, das ist die seltsamste Bindung, die ich gesehen habe. Ich kann Ihnen mit dem zweiten Teil Ihrer Frage helfen. Um die Eigenschaft, die Sie im Viewmodel benötigen, zu erreichen, müssen Sie BindingContext = new (your_ViewModel) setzen. Wenn Sie dies tun, können Sie leichter daran binden. Können Sie mehr vom Codebehind und vom Xaml teilen, damit wir Ihnen besser helfen können. Noch eine Frage, warum willst du es mit C# anstelle von Xaml machen? – BraveHeart
Ich muss in der Lage sein, die Löschaktion programmatisch ein-/auszublenden, weshalb ich es von C# aus mache. Dies ist eine Generic-View-Zelle, die ich an mehreren Stellen verwende. – aherrick
Ich muss auf den Befehl "Befehl löschen" des View-Modells aus dem Kontext einer bestimmten View-Zelle zugreifen. – aherrick