繁体   English   中英

我正确使用 ICommand 吗?

[英]Am I using ICommand correctly?

我有简单的 2 个按钮。 我应该创建 1 个ICommand还是现在可以?

internal class MainPageViewModel : INotifyPropertyChanged
{
    public ICommand RegisterBtnClickedCommand {get; }
    public ICommand LoginBtnClickedCommand {get; }

    public MainPageViewModel()
    {
        RegisterBtnClickedCommand = new Command(RegisterButtonPressed);
        LoginBtnClickedCommand = new Command(LoginButtonPressed);
    }

    private void LoginButtonPressed()
    {
        Application.Current.MainPage.DisplayAlert("Login", "Login", "ok");
    }

    private void RegisterButtonPressed()
    {
        Application.Current.MainPage.DisplayAlert("Reg", "Reg", "ok");
    }

    public event PropertyChangedEventHandler PropertyChanged;
}

例如,如果我有 10 个按钮,那么我应该有 10 个命令吗?

例如,如果我有 10 个按钮,那么我应该有 10 个命令吗?

是的。

请注意,单个命令可能会以不同的方式调用(按钮、菜单项、键盘快捷键、单元测试代码),并且每个命令可能具有不同的CanExecute逻辑。 因此,命令在命令本身(=您的 ICommand)和调用它的方式(XAML 中的绑定)之间提供了方便的关注点分离。

如果您担心样板代码过多,可以通过在声明点(而不是在构造函数内部)初始化属性来稍微缩短代码:

public ICommand RegisterBtnClickedCommand { get; } = new Command(RegisterButtonPressed);
...

为此保留两个单独的命令。 “登录”和“注册”是足够不同的操作。 可以重复使用命令来执行某些操作,例如从列表中删除项目并传入参数来识别项目,但这里不是这种情况。

虽然我不会在它们的名称中包含BtnButtonPressed ,因为它们应该与任何 UI 想法分开(想象稍后使用链接而不是按钮)。 例如,我会使用LoginCommandLoginExecute

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM