Привязка команд не работает в Flyout или FlyoutMenu - PullRequest
0 голосов
/ 27 мая 2018

Так что другие мои кнопки, которые все установлены одинаково, в пределах одного и того же представления и модели представления, работают нормально.

Однако этот, который находится внутри контекстного меню, не делает.Также нет ошибок выражения привязки, даже когда я изменяю привязку команды к тому, что, как я знаю, не существует, что мне кажется очень интересным

XAML

  <ListView SelectionMode="Single" ItemsSource="{Binding Path=DisplayImages}" >
        <ListView.Resources>
           <Style TargetType="ListViewItem">
               <Setter Property="ContextFlyout">
                    <Setter.Value>
                         <MenuFlyout>
                            <MenuFlyoutItem Text="Save Image" Icon="Save" Command="{Binding Path=SaveImageCommand}"/>
                         </MenuFlyout>
                    </Setter.Value>
               </Setter>
            </Style>
  </ListView.Resources>

C #

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

private async void SaveImageExecuted()
{
}

Мой обработчик команд

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();
    }
}

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Я нашел другой обходной путь для этого тоже.Если вы установите свойство Command MenuFlyoutItem, используя x: Bind вместо Binding, это будет работать, если у MenuFlyout есть x: Name.

<MenuFlyout x:Name="MyMenuFlyout">
    <MenuFlyoutItem Text="Save Image" Icon="Save" Command="{x:Bind SaveImageCommand}"/>
</MenuFlyout>
0 голосов
/ 28 мая 2018

Так что я ДОВОЛЬНО уверен, что это ошибка в фреймворке.

Чтобы обойти это, я решил просто использовать обработчик щелчка, чтобы вызвать выполненную команду в модели представления.Супер джанки, но это работает.

XAML

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

За кодом

    private void OnSaveContextMenuClicked(object sender, RoutedEventArgs e)
    {
        viewModel.SaveImageCommand.Execute(sender);            
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...