我想使用一个方法,该方法不在命令的Executed
事件后面的代码中,另一个用于CanExecute
。
我使用的是RoutedCommand
,我不想使用委托命令或中继命令。
我得到的是一个Commands类:
public class Commands
{
static Commands()
{
syncCommand = new RoutedUICommand("Sync", "syncCommand", typeof(Commands));
undoCommand = new RoutedUICommand("Undo", "UndoCommand", typeof(Commands));
}
private static MyHandler handler;
public static MyHandler Handler
{
set { handler = value; }
get { return handler; }
}
private static RoutedUICommand syncCommand;
public static RoutedUICommand SyncCommand
{
get
{ return syncCommand; }
}
private static void SyncCanExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = Handler != null;
}
private static void SyncExecute(object sender, ExecutedRoutedEventArgs e)
{
Handler.Action();
}
private static RoutedUICommand undoCommand;
public static RoutedUICommand UndoCommand
{
get { return undoCommand; }
}
private static void UndoCanExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = Handler.WereChangesMade();
}
private static void UndoExecute(object sender, ExecutedRoutedEventArgs e)
{
Handler.Undo();
}
}
在ViewModel中,我获得了ICommand属性和按钮以及绑定到这些属性的Command属性。
我想使用上面的方法作为我将传递给命令绑定的方法。如果他们不在后面的代码中,我该怎么做?
答案 0 :(得分:0)
您需要向其中一个UI元素添加CommandBinding,因为RoutedUICommand需要在某处进行隧道和冒泡以进行处理。如果所有其他方法都失败了,那么你的MainWindow。
CommandBindings.Add(new CommandBinding(Commands.SyncCommand, Commands.SyncExecute, Commands.SyncCanExecute));
SyncExecute和SyncCanExecute需要可以访问此绑定的位置,因此私有不会。
答案 1 :(得分:0)
你好我写了一个"""自定义CommandBinding,您可以将RoutedCommand绑定到ICommand。 (How to bind a RelayCommand(MVVM) to a RoutedCommand? (CommandBinding))