c# - 在 View 模型中使用 ICommand 可以吗

标签 c# wpf mvvm

大多数 WPF mvvm 应用程序,我们在 View 模型中使用 ICommand。但它指的是 System.Windows.Input。所以 View 模型现在与 System.Windows.Input 命名空间紧密结合。根据我的理解, View 模型应该能够在普通的 C# winform 应用程序或 asp.net 应用程序中使用。

通常我们使用以下代码行来执行 RelayCommand 实现的命令。

private RelayCommand testCommand;// or private ICommand testCommand;

public ICommand TestCommand
{
    get
    {
        return testCommand ?? 
            (testCommand = new RelayCommand(param => Test()));
    }
}

public void Test()
{

}

我觉得我们需要删除所有 ICommand 并改用 RelayCommand。所以我们可以从 View 模型中删除 System.Windows 命名空间。所以最终代码看起来像这样,

private RelayCommand testCommand;

public RelayCommand TestCommand
{
    get
    {
        return testCommand ?? 
            (testCommand = new RelayCommand(param => Test()));
    }
}

public void Test()
{

}

对这种方法有什么建议吗?或者有什么方法可以从 View 模型中消除 System.Windows 命名空间?

最佳答案

Any suggestions on this approach?

这仍然不会将您与 System.Windows.Input 分离,因为 RelayCommand 仍然必须实现 ICommand,即使它是间接实现它.

在 ViewModel 中实现 ICommand 是为了实用而需要做的事情之一。理想情况下,ICommand(或类似接口(interface))将在非 XAML 特定的命名空间中实现。也就是说,它直接在 Portable Class Libraries 中得到支持。 ,因此它不像一般的 XAML 那样依赖于特定框架(WPF、Silverlight、Phone 等)。

关于c# - 在 View 模型中使用 ICommand 可以吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15370129/

相关文章:

c# - 在运行时更改 DataTrigger 绑定(bind)引用

android - 如何使用 Android Jetpack 导航组件在菜单项单击时导航到 fragment

c# - 重新评估 UniformGrid 行和列 WPF

c# - 错误: This type of CollectionView does not support changes to its SourceCollection

c# - 在google身份验证中将用户信息存入数据库

c# - 不可空类型的通用约束

c# - NHibernate HQL Generator 支持 SQL Server 2016 时态表

c# - 如何检查 Zebra 105SL 打印机是否正常/就绪

c# - ViewModel 中计时器的更好解决方案?

.net - DataGrid 创建 RadioButton 列