2010-04-06 2 views
0

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

Любые идеи?

Спасибо.

ответ

0

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

+0

ОК, я согласен, но как его обрабатывать и реализовывать? Я хотел бы сделать то же самое, расстрелянных и методы CanExecute, например: частной ничтожной CanExecuteChanged (объект отправителя, EventArgs е) { // Выполняем мои вещи } Моя проблема заключается в том, что я не знаю, как для привязки этого события к командной кнопке. В моем XAML я:

+0

Что такое «MyCommand»? Как это определяется? И, пожалуйста, отредактируйте ваш ответ, чтобы опубликовать код: в комментариях это нечитаемо –

+0

Извините, я опубликовал пример о том, что я хочу делать. Я опубликовал его как ответ, чтобы сделать его более читаемым. – user304602

0

Например:

в 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.

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

Смежные вопросы