命令绑定在Flyout或FlyoutMenu中不起作用

时间:2018-05-27 17:08:42

标签: c# xaml uwp

所以我的其他按钮在同一个视图和视图模型中以相同的方式操作,工作正常。

然而,这个恰好位于上下文菜单中,却没有。即使我将命令绑定更改为我知道不存在的东西,也没有任何绑定表达式错误,我发现它非常有趣

XAML

public ICommand SaveImageCommand { get; set; }
SaveImageCommand = new CommandHandler(SaveImageExecuted, true);

private async void SaveImageExecuted()
{
}

C#

public class CommandHandler : ICommand
{
    private Action _action;
    private bool _canExecute;
    public CommandHandler(Action action, bool canExecute)
    {
        _action = action;
        _canExecute = canExecute;
    }

    public bool CanExecute(object parameter)
    {
        return _canExecute;
    }

    public event EventHandler CanExecuteChanged;

    public void Execute(object parameter)
    {
        _action();
    }
}

我的命令处理程序

class Index extends CI_Controller

2 个答案:

答案 0 :(得分:1)

所以我很确定这是框架中的错误。

要解决这个问题,我决定只使用一个click处理程序来调用viewmodel中执行的命令。超级janky,但它的工作原理。

XAML

    <MenuFlyoutItem Text="Save Image" Icon="Save" Click="OnSaveContextMenuClicked"/>

代码背后

    private void OnSaveContextMenuClicked(object sender, RoutedEventArgs e)
    {
        viewModel.SaveImageCommand.Execute(sender);            
    }

答案 1 :(得分:1)

我也找到了另一种解决方法。 如果使用x:Bind而不是Binding设置MenuFlyoutItem Command属性,则只要MenuFlyout具有x:Name即可。

<MenuFlyout x:Name="MyMenuFlyout">
    <MenuFlyoutItem Text="Save Image" Icon="Save" Command="{x:Bind SaveImageCommand}"/>
</MenuFlyout>