Реализация пользовательского события CanExecuteChanged с помощью команд в WPF - PullRequest
0 голосов
/ 06 апреля 2010

Я пытаюсь сделать пользовательское событие CanExecuteChanged для командной кнопки. Внутри события CanExecuteChanged я хотел бы сделать кое-что, когда значение canExecute изменилось, но я не хочу делать это путем реализации пользовательского класса кнопки команды (производного от Button и реализации ICommandSource). Также я не хочу делать свои вещи в метод CanExecute.

Есть идеи?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 07 апреля 2010

Например:

в XAML:

<Page  xmlns:local="clr-namespace:MySolution" ....>
 <Page.CommandBindings>
    <CommandBinding Command="{x:Static local:MyNameSpace.MyClass.MyRCmd}"
               Executed="MyCmdBinding_Executed"
               CanExecute="MyCmdBinding_CanExecute"/>
 </Page.CommandBindings>

  ...

 <Button Command="{x:Static local:MyNameSpace.MyClass.MyRCmd}" ... />

  ...

</Page>

И в коде страницы позади:

namespace MyNameSpace
{

public partial class MyClass : Page
{

    ...

    public static RoutedCommand MyRCmd = new RoutedCommand();

    public event EventHandler CanExecuteChanged;

    private void CanExecuteChanged(object sender, EventArgs e) 
    { 
      // Here is my problem: How to say to execute this when CanExecute value is
      // changing? I would like to execute this on CanExecute value changed.
      // I think somewhere I can tell compiler the handler for CanExecutedChanged is 
      // this. How to?
    } 

    private void MyCmdBinding_Executed(object sender, ExecutedRoutedEventArgs e)
    {
        // Do my stuff when CanExecute is true
    }

    private void MyCmdBinding_CanExecute(object sender, CanExecuteRoutedEventArgs e)
    {
        if (....)
        {
            e.CanExecute = true;
        }
        else
        {
            e.CanExecute = false;                
        }
    }

    ...

} // end class

} // end namespace

и моя проблема в том, как сказать компилятор: Эй, при изменении значения CanExecute вы должны вызвать и выполнить все это в метод CanExecuteChanged.

Большое спасибо.

0 голосов
/ 06 апреля 2010

Вы можете обработать событие CanExecuteChanged команды

...