2014-09-23 4 views
3

는 기본적으로, 휴대용 클래스 라이브러리를 생성하고 ViewModels의 무리 만드는 오전 : 나는 WinRT와 WPF 애플 리케이션을위한 재사용에 대해 원하는 경우ASP.NET MVC 프로젝트에서 ICommand를 활용할 수 있습니까?

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) { ... } 
} 

이 중대하다,하지만 어떻게 내가이 클래스를 이용할 수 ASP.NET MVC 웹 사이트? 어쨌든이 클래스가 컨트롤러로하는 모든 것을 그냥 랩핑해야만하는 것 같습니다. 또한 ICommand는 ASP.NET MVC 응용 프로그램에서도 사용할 수 있습니까?

정말 내 view-models의 recoded 버전 인 클라이언트 측 MVVM javascript 라이브러리를 갖고 싶지 않습니다.

+0

* ICommand를 사용하려면 WPF 어셈블리에 의존해야합니다. 그러나 CanExecute 및 Execute 메서드를 노출하기 만합니다. 그래서 초보적인 수준에서 네, MVC에서 사용할 수 있습니다. HTML 프론트 엔드에 연결하는 것은 물론입니다. 물론 .NET이 아니고 HTML은 JavaScript를 사용합니다. –

+0

knockout.js 매핑 플러그인을 사용하면 javascript에서 C#보기 모델을 다시 만드는 노력을 줄일 수있는 정말 좋은 방법입니다 – Jedediah

+0

MVVM은 재사용 가능성보다 테스트 가능성이 좋습니다. 이 시나리오는 다음을 구현해야합니다./ – Will

답변

0

MVC ViewModels에서이를 직접 사용하면 적어도 무의미하고 기능이 저하됩니다. WPF의 MVVM과 달리 ViewModel의 인스턴스는 상호 작용 (클릭, POST 등)을 통해 유지되지 않지만 다시 생성되기 때문입니다. 따라서 전체 INPC (INotifyPropertyChanged)는 작동하지 않습니다.

ICommand는 뷰가 데이터 바인딩 될 다른 속성을 기반으로 활성화/비활성화되어야하지만 MVC에서 데이터 바인딩 (말하자면)은이 개념을 쓸모 없게하는 일회성 (렌더링시)이기도합니다. .

MVVM 및 MVC는 호환되지 않습니다. 죄송합니다. 몇 년 전 플랫폼을 가로 질러 물건을 재사용하려고했지만 같은 문제를 겪었지만 할 수 없었습니다. (WPF-ish) ViewModel 클래스를 MVC 용으로 더 받아 들일 수있는 형식으로 변형하려고 시도한 T4 (텍스트 템플릿)조차도 아닙니다.