C# 是否可以在ASP.NET MVC项目中利用ICommand?

C# 是否可以在ASP.NET MVC项目中利用ICommand?,c#,asp.net-mvc,mvvm,portable-class-library,icommand,C#,Asp.net Mvc,Mvvm,Portable Class Library,Icommand,基本上,我正在创建一个可移植类库,并创建一组ViewModels: public class CustomerViewModel : ViewModelBase { public string FirstName { ... } // INPC public string LastName { ... } // INPC public string FullName { get { return FirstName + " " + LastNam

基本上,我正在创建一个可移植类库,并创建一组ViewModels:

public class CustomerViewModel : ViewModelBase
{
    public string FirstName { ... } // INPC
    public string LastName { ... } // INPC

    public string FullName
    {
        get { return FirstName + " " + LastName; }
    }

    public ICommand DoFooCommand { get; private set; } // DelegateCommand

    private bool CanDoFoo(object parameter) { ... }
    private void DoFoo(object parameter) { ... }
}
如果我想要WinRT和WPF应用程序的可重用性,这是很好的,但是如何在ASP.NET MVC网站上利用这个类呢?似乎我必须把这个类所做的一切都打包成一个控制器。此外,ICommand是否可用于ASP.NET MVC应用程序


我真的不希望客户端MVVM javascript库只是我的视图模型的重新编码版本。

在MVC视图模型中直接使用它至少是毫无意义和功能失调的。这是因为与WPF中的MVVM不同,ViewModel的实例不是跨交互(单击、发布等)保存的,而是重新创建的。因此,整个INPC(INotifyPropertyChanged)将无法工作

ICommand需要根据视图将数据绑定到的其他属性启用/禁用,但MVC中的数据绑定(可以说)是一次性的(在渲染时),这也会使此概念变得无用


MVVM和MVC不兼容,抱歉。几年前,我也遇到过同样的问题,试图跨平台重用东西,但我做不到。即使使用T4(文本模板),我也尝试将(WPF ish)ViewModel类转换为MVC更可接受的形式。

如果要使用该ICommand,您必须依赖WPF程序集。但是,它只是公开了CanExecute和Execute方法。因此,从最基本的层面来看,您可以在MVC中使用它。要将它连接到HTML前端,当然不是。它是.NET,HTML使用JavaScript。使用knockout.js映射插件是一个非常好的方法,可以节省您在javascriptMVVM中重新创建C#视图模型的工作量,因为它的可测试性比可重用性更好。这个场景很难实现:/@PeterRitchie从.NET 4.5开始,ICommand在System.dll中,因此您不需要引用WPF程序集。