我使用以下XAML来绑定视图模型中的delete命令:
<TextCell.ContextActions>
<MenuItem Command="{Binding Path=BindingContext.DeleteCollectionCommand, Source={x:Reference Name=CollectionListView}}"
CommandParameter="{Binding .}"
Text="Delete"
IsDestructive="True" />
</TextCell.ContextActions>
我正在尝试将其转换为C#,以便可以以编程方式使用它。
我已经尝试了以下方法,但是它不起作用。需要更改什么?是否有更好/不同的方法来访问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);
}
编辑
我可以通过组合skar的答案并从父级视图像这样初始化Cell来使此工作正常进行:
lstView.ItemTemplate = new DataTemplate(() =>
{
var cell = new DeleteGenericListItemTemplate(page);
return cell;
});
不知道这是否是理想的..但是让我动弹。
如果您在文本单元格上扩展以创建类似于以下内容的页面引用,则应该能够通过页面的绑定上下文访问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);
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句