我有以下XAML工作绑定到我的视图模型中的删除命令:
@org.springframework.context.annotation.Configuration
@EnableTransactionManagement
@EnableNeo4jRepositories(basePackages = "com.seyfert.matrix.graph.repository")
public class DBConfig extends Neo4jConfiguration{
...
我正在尝试将其转换为C#,因此我可以通过编程方式使用它。
我尝试过以下但是没有用。需要改变什么?是否有更好/不同的方式来访问ViewModel DeleteCommand?
<TextCell.ContextActions>
<MenuItem Command="{Binding Path=BindingContext.DeleteCollectionCommand, Source={x:Reference Name=CollectionListView}}"
CommandParameter="{Binding .}"
Text="Delete"
IsDestructive="True" />
</TextCell.ContextActions>
修改
我能够通过结合skar的答案并从父视图中初始化Cell来实现这一点:
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);
}
不确定这是否理想......但让我感动。
答案 0 :(得分:0)
我通过向我的(自定义)视单元添加一个 ParentContext 属性来解决这个问题。使用 AncestorType 将该属性设置为 ViewModel,如下所示:
ParentContext="{Binding ., Source={RelativeSource AncestorType={x:Type local:MyViewModel}}}"
我的自定义视单元:
public static readonly BindableProperty ParentContextProperty = BindableProperty.Create("ParentContext", typeof(object), typeof(CustomViewCell), null, BindingMode.OneTime);
public object ParentContext
{
get { return GetValue(ParentContextProperty); }
set { SetValue(ParentContextProperty, value); }
}
然后在我的视单元中,我通过引用视单元 x:Name 添加了 contextaction 并且它有效:)
<ViewCell.ContextActions>
<MenuItem
Command="{Binding ParentContext.TheCommand, Source={x:Reference customViewCellName}}"
CommandParameter="{Binding Id}"
Text="Some text">
</MenuItem>
</ViewCell.ContextActions>