gpt4 book ai didi

c# - Xamarin 将 XAML ContextAction 绑定(bind)到 ViewCell 中的 C#

转载 作者:行者123 更新时间:2023-11-30 17:36:49 24 4
gpt4 key购买 nike

我有以下 XAML 用于绑定(bind)到我的 View 模型中的删除命令:

        <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 的答案并从父 View 像这样初始化 Cell 来实现此目的:

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

不确定这是否理想..但让我感动。

最佳答案

如果您在文本单元格上进行扩展以创建如下内容并引用您的页面,您应该能够通过页面的绑定(bind)上下文访问 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);


}
}

关于c# - Xamarin 将 XAML ContextAction 绑定(bind)到 ViewCell 中的 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38943452/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com