糟糕的MVVM实践?(CommandParameter)

本文关键字:CommandParameter 实践 MVVM | 更新日期: 2023-09-27 18:18:37

在我的代码我有3个按钮。他们每个人都执行不同的东西。我让他们使用相同的命令执行,但我给了他们不同的CommandParameter来指定差异。

下面是我所说的一个例子

XAML:

            <Button Command="{Binding UpdateCommand}" CommandParameter="Add">Add Client</Button> 
            <Button Command="{Binding UpdateCommand}" CommandParameter="Change">Change Client</Button>
            <Button Command="{Binding UpdateCommand}" CommandParameter="Remove">Remove Client</Button>

ViewModel:

        public MainWindowViewModel()
        {
            clients.Add(new Client() { Name = "Client 1" });
            clients.Add(new Client() { Name = "Client 2" });
            //UpdateCommand = new ClientUpdateCommand(this);
            UpdateCommand = new DelegateCommand(param => ClientExecuteCommand((string)param), param => ClientCanExecuteCommand((string)param));
        }
        public void ClientExecuteCommand(string param)
        {
            ClientDialog cd;
            switch(param)
            {
                case "Add":
                    cd = new ClientDialog("Add Client", "Add Client", "Random User");
                    cd.ShowDialog();
                    clients.Add(new Client() { Name = cd.nameTxtBox.Text });
                    break;
                case "Change":
                    cd = new ClientDialog("Change Client", "Change Client", SelectedClient.Name);
                    cd.ShowDialog();
                    SelectedClient.Name = cd.nameTxtBox.Text;
                    break; 
                case "Remove":
                    clients.Remove(SelectedClient);
                    break;
            }
        }
        public bool ClientCanExecuteCommand(string param)
        {
            if (param == "Add")
                return true;
            else
                return !(SelectedClient == null);
        }

我只是想知道如果这是糟糕的编程实践,或者如果我应该为每个按钮创建一个不同的命令?如果可以的话;什么时候我应该创建CommandParameter的?

提前感谢您的回答:)

糟糕的MVVM实践?(CommandParameter)

这是值得商榷的做法。问问你自己:如果你正在创建方法而不是命令,你会将它们命名为"Update"并将要更新的内容作为"字符串参数"传递,还是你宁愿使用有意义的名称来单独使用方法?

您的公共接口变得不那么清晰(您需要记录作为"参数"传递的内容),您使您的设计变得更加脆弱(一个错字不会导致任何错误或警告),您引入了神奇常量。总的来说,您使代码变得更糟。如果你想看的话,可以再短一点。

如果您想避免为每个操作创建命令(这会变得冗长而令人讨厌),您可以使用MVVM库,它不会强制您这样做。例如,Caliburn。在Micro中,您可以只使用三个方法和三个按钮,而无需使用命令和参数。

相关文章:
  • 没有找到相关文章