gpt4 book ai didi

c# - 我应该为界面中的每个按钮创建一个类吗?

转载 作者:行者123 更新时间:2023-12-03 10:57:36 28 4
gpt4 key购买 nike

我有一个问题,我看了很多关于 MVVM 的教程,但我仍然感到困惑。
我有一个带有多个按钮的界面,我必须实现 ICommand 界面才能将命令绑定(bind)到 View 。

我是这样做的:

主要解决方案

Main Solution
Model
SomeClass.cs
ViewModel
Commands
SomeCommands.cs
SomeViewModel.cs

好的,现在在界面中我有多个按钮,每个按钮都做不同的事情,例如,一个用于启动线程,另一个用于取消它,第三个用于另一件事。
我应该为 View 上的每个按钮创建一个实现 ICommand 接口(interface)的单独类吗?
Main Solution
Model
SomeClass.cs
ViewModel
Commands
StartCommands.cs
CancelCommands.cs
OtherCommands.cs
SomeViewModel.cs

我问这个是因为当我实现 ICommand 接口(interface)时,我只有一个“Execute”方法和一个“CanExecute”方法。通过绑定(bind)在 View 上实现多个按钮的常用方法是什么?

我在网上搜索了一个例子,没有任何运气......其中很多都很令人困惑,而且肯定不适合像我这样的新手。

另一件事是当我有多个 View 和多个 View 模型时,我应该创建多个命令文件夹来嵌套它吗?
Main Solution
Model
SomeClass.cs
ViewModel
FirstCommands
StartCommands.cs
CancelCommands.cs
OtherCommands.cs
SecondCommands
StartCommands.cs
CancelCommands.cs
OtherCommands.cs
FirstViewModel.cs
SecondViewModel.cs

最佳答案

恕我直言,在经典的 MVVM 方法中为每个命令设置一个单独的类是一种矫枉过正的做法。使用类似 MVVMLight 的 RelayCommand (和 generic one 如果你想传递一个参数)。

然后您可以将您的命令定义为您的 ViewModel 成员并提供 Execute/CanExecute实现也作为 ViewModel 的一部分:

public RelayCommand MyCommand { get; }

public MyView()
{
//[...]
this.MyCommand = new RelayCommand(this.ExecuteMyCommand, this.CanExecuteMyCommand);
}

public void ExecuteMyCommand()
{
//do work!
}

public bool CanExecuteMyCommand()
{
//optional - control if command can be executed at a given time
}

你可以绑定(bind)到 MyCommand在 XAML 中(假设您的 View 绑定(bind)到您的 ViewModel):
<Button Content='WORK!' Command='{Binding MyCommand}' />

关于c# - 我应该为界面中的每个按钮创建一个类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39977899/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com