这是我目前的设置:
我有一个 WPF 应用程序,它有一个复制按钮,它接受一个应用程序目录并将其复制到另一个目录。完成后,我有另一个按钮可以从新位置启动应用程序。理想情况下,我希望只有 1 个按钮,在复制完成后,按钮的文本会更改为“启动”,然后单击它会启动应用程序。然而,用户需要能够通过再次单击按钮来重新复制,但这一次,它应该说“复制”。这是可能的,甚至值得吗?
最简单的方法是将状态存储在可从您的代码隐藏访问的变量中,并if
在按钮OnClick
决定做什么时声明。
这可能不值得麻烦,因为改变其含义的按钮可能会让您的最终用户感到困惑。我会做两个单独的按钮,但我会根据应用程序的状态有条件地启用或禁用它们。当复制是唯一有意义的操作时,[Copy]
按钮将被启用,而[Run]
按钮将被禁用。当状态发生变化时,这些按钮的启用/禁用状态也会发生变化。这将为您的应用程序的最终用户提供清晰的视觉提示,并使您的应用程序更容易使用各种 UI 测试自动化工具进行自动测试。
这绝对是可能的,但有两个按钮似乎要简单得多。您可以根据当前状态切换它们的可见性,因此当您希望能够启动时,“启动”按钮可见,而当您想要复制时,“复制”按钮可见。
这将使您的命令更简单(每个命令执行一个操作)。
一种方法是使用 a RelayCommand
,然后使用 if 语句调用适当的函数。在这里RelayCommand
定义。
我会创建两个CommandViewModels
应该包含一个Command
和Header
。然后你可以有一个包含这样一个模型的属性,Button.Content
然后将绑定到Header
当前的CommandViewModel
,并且Button.Command
将绑定到Command
. 然后,您只需将该属性更改为 other CommandViewModel
。(这甚至可以在第一个Command
's中完成Execute
。)