我一般都不熟悉WPF和c#。我正在阅读有关命令设计模式的信息,并期待在我的新应用程序中实现它,以便它可以执行和撤消功能。然后我意识到WPF已经带有ICommand接口,并且de xml按钮可以实现它。表示接口有以下方法:
public bool CanExecute(object parameter)
{
}
private void OnCanExecuteChanged()
{
}
public void Execute(object parameter)
{
}
那么,我应该通过让其他接口继承它并添加undo方法,来向已经在ICommand Interface中构建的此功能添加撤消功能吗?
此界面仅用于按钮吗?我的意思是,我想创建许多其他未必连接到xnml按钮的命令
提前谢谢!
答案 0 :(得分:1)
首先,这些命令是MVVM模式的一部分,您应该首先了解它。
C#中的接口不提供任何功能,它们仅描述了继承此接口的类应如何工作。如果您希望类做某事,则不应将这些方法留空。
WPF中的命令代表一种框架,以后将向其传输逻辑。命令最合乎逻辑的用法是将它们绑定到按钮。
ICommand实现示例:
public class RelayCommand : ICommand
{
private readonly Action<object> execute;
private readonly Func<object, bool> canExecute;
public event EventHandler CanExecuteChanged {
add => CommandManager.RequerySuggested += value;
remove => CommandManager.RequerySuggested -= value;
}
public RelayCommand(Action<object> execute, Func<object, bool> canExecute = null)
{
this.execute = execute;
this.canExecute = canExecute;
}
public bool CanExecute(object parameter)
{
return canExecute == null || canExecute(parameter);
}
public void Execute(object parameter)
{
execute(parameter);
}
}
使用示例的命令:
public static RelayCommand NavigateToSignInPage => new RelayCommand(
actionParameter => Application.Instance.Navigation.NavigateTo(new LoginForm()));
public static RelayCommand NavigateToSignUpPage => new RelayCommand(
actionParameter => Application.Instance.Navigation.NavigateTo(new RegistrationForm()));
public static RelayCommand NavigateToStartPage => new RelayCommand(
actionParameter => Application.Instance.Navigation.NavigateTo(new StartPage()));
public static RelayCommand NavigateBack => new RelayCommand(
actionParameter => Application.Instance.Navigation.NavigateBack(),
actionPossibilityParameter => Application.Instance.Navigation.BackNavigationPossible);
命令绑定示例: 可见(xaml):
<Button x:Name="CancelButton"
Content="Cancel"
Command="{Binding CancelCommand}"
Grid.Row="2"
IsCancel="True"
HorizontalAlignment="Left"
Margin="44,0,0,0"
Width="118" Height="23"
VerticalAlignment="Center" />
在ViewModel中:
public RelayCommand CancelCommand => NavigationCommands.NavigateBack;
答案 1 :(得分:0)
CanExecute
将引导您确定是否执行Command,对于Command实施,您可以看到here。答案 2 :(得分:0)
我认为您在这里混淆其他事情。 ICommand Interface
是用于将UI事件绑定到诸如MVVM之类的设计模式中使用的代码的东西。您尝试实现的Command Design Pattern
是undoing actions的状态架构,就像按下按钮一样。