gpt4 book ai didi

mvvm - ICommand 是否总是需要一个对象作为参数?

转载 作者:行者123 更新时间:2023-12-03 10:55:30 25 4
gpt4 key购买 nike

当我实现 ICommand接口(interface),创建以下方法

#region ICommand Members

public bool CanExecute(object parameter)
{
}

public event EventHandler CanExecuteChanged;

public void Execute(object parameter)
{
}

#endregion

有趣的部分是
public void Execute(object parameter)
{
}

仅仅是因为它表明它需要 1 个参数。如果我不需要传递参数怎么办?在我的 ViewModel 我有以下代码
public class DownloadViewModel : BaseViewModel
{
public ICommand BrowseForFile { get; set; }

public string File { get; set; }

public DownloadViewModel()
{
BrowseForFile = new RelayCommand(new Action<object>(OpenDialog));
}

private void OpenDialog(object o)
{
var dialog = new System.Windows.Forms.FolderBrowserDialog();
System.Windows.Forms.DialogResult result = dialog.ShowDialog();
File = dialog.SelectedPath;
}
}
OpenDialog方法不需要参数,但似乎我必须这样做才能满足接口(interface)。

我这样做是对的还是我错过了重点?

最佳答案

是的,ICommand总是需要一个对象和RelayCommand也。如果你不需要它,你传递 null 并且不要在你的方法中使用它,这很丑陋。

我会使用 Prism 的 DelegateCommand反而。这存在于不带参数的非通用版本中:

Command = new DelegateCommand(DoSomething);
CommandWithParameter = new DelegateCommand<int>(DoSOmethingWithInt);

它在 PRISM 程序集中,您必须下载和引用。
using Microsoft.Practices.Prism;

PRISM

或者,使用 MVVMLight 工具包,它提供了一个基本相同的命令类。无论如何,在没有 MVVM 框架的情况下使用 MVVM 是没有意义的。我可以推荐 PRISM,也因为它是基本的东西,比如 DelegateCommandEventAggregator .

关于mvvm - ICommand 是否总是需要一个对象作为参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15290357/

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