Проблемы с ApplicationCommands между модулями в Wpf с Prism - PullRequest
0 голосов
/ 13 декабря 2018

Я использую WPF с Призмой.У меня есть пользовательский Canavs DrawingCanvas.cs в Модуль A , где я установил ApplicationCommands.Delete в качестве привязки команд следующим образом.

this.CommandBindings.Add(newCommandBinding(ApplicationCommands.Delete, Delete_Executed, Delete_Enabled));

У меня есть еще один Модуль B , где у меня есть MenuItem для удаления и еще одна кнопка для удаления,Я установил команду из xaml для обоих следующим образом.

<MenuItem Header="Delete" x:Name="menuItemDelete" Command="{x:Static ApplicationCommands.Delete}"

<Button x:Name="buttonDelete" Background="Black"   Height="25" Width="25" ToolTip="Delete" Command="{x:Static ApplicationCommands.Delete}"/>

Здесь MenuItem для удаления работает нормально, как и ожидалось.( MenuItem будет включен, когда какой-либо чертеж выбран в DrawingCanvas из пользовательского интерфейса и "Delete_Executed" в DrawingCanvas.cs будет вызываться, когда при нажатии пункта меню "Удалить" )

Но кнопка удаления всегда Disabled .Он не включается, когда в DrawingCanvas из интерфейса выбран некоторый рисунок.Мне интересно, почему одна и та же команда работает для MenuItem, но не для Button в том же виде и в том же модуле.

Кто-нибудь может мне помочь с этим?Я что-то не так делаю?

Заранее спасибо.

1 Ответ

0 голосов
/ 13 декабря 2018

Проблема здесь в том, что CanExecute для ApplicationCommands.Delete постоянно возвращает false.Есть один способ решить эту проблему - через привязку команд Window:

<Window.CommandBindings>
    <CommandBinding Command="ApplicationCommands.Delete" CanExecute="CommandBinding_CanExecute"/>
</Window.CommandBindings>

Обработчик события будет выглядеть так:

private void CommandBinding_CanExecute(object sender, CanExecuteRoutedEventArgs e)
{
    e.CanExecute = true;
}

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

...