2013-07-03 2 views
1

내 문제는 Does MvvmCross work in Xamarin Studio?에서 태어났습니다. MvvmCross는 Visual Studio에서 잘 작동합니다. 그러나 저는 빌드 서버가 사용하는 Xamarin Studio를 사용하여이를 회사에 배포해야했습니다. Xamarin Studio를 빌드하는 동안 System.Windows.Input.Command가 컴파일러에서 발견되지 않아 문제가 발생했습니다. ICommands는 사용자 명령 (System.Windows.Input.ICommand를 구현하는 MvxCommand)에 대해 MvvmCross에서 매우 광범위하게 사용되는 것으로 보입니다. 이 인터페이스 System.Windows.Input.ICommand를 구현하므로, MvxCommand가 해결되지 여전히MvvmCross, Xamarin Studio 및 ICommands

using System; 

namespace Something.Common 
{ 
    public interface ICommand 
    { 
     event EventHandler CanExecuteChanged; 
     bool CanExecute(object parameter); 
     void Execute(object parameter); 
    } 
} 

모든 좋은,하지만 : 나는 다음과 같은 코드를 통해 ICommand의 내 자신의 버전을 만드는 시도했습니다. 그래서 나는 Stuart의 MvxCommand에서 기본적으로 복사되고 내 자신의 ICommand (Something.Common.ICommand)를 구현하는 자체 버전 인 MvxCommandEx를 만들었습니다.

소호, 보라. 배포합니다. 그것은 나를 흥분하게했다. 하지만 .... 작동하지 않았다. UI 요소를 내 사용자 지정 ICommand에 바인딩 한 모든 위치는 아무 것도 수행하지 않습니다. 마치 컨트롤의 Click 이벤트에서 뷰 모델의 명령 바인딩을 더 이상 .axml 레이아웃 파일에 바인딩 여부 ... 또는 CreateBindingSet 메서드를 기본 제공보기에 사용합니다. 이제

... 내가 표준 안드로이드 버튼을 사용하는 경우, 예를 들어 ... 몇 가지에 대해이 문제를 해결 얻고, 수동으로 뷰 모델의 명령을 호출 할 수 있습니다 내장 된 Click 이벤트, 같은 :

btnAddScope.Click += (o, i) => { _ViewModel.RequestAddScope.Execute(null); }; 

작동하며, Xamarin이 PCL 지원을 해제 할 때까지 중간에서이 방법을 사용해도됩니다. 하지만 같은 구문을 사용하여 옛날 방식을 바인드 앱의 다른 섹션에 MvxListView을 사용하고 있습니다 : LST는 MvxListView입니다

lst.ItemClick = _ViewModel.RequestViewScope; 

합니다.

그러나 lst.ItemClick에 System.Windows.Input.ICommand가 필요하고 내 ICommand가 해당 네임 스페이스에 없기 때문에이 방법은 작동하지 않습니다.

스튜어트는 이것에 대한 설명을 제공하기로되어 있다고 가정합니다. 그러나 실제로 작동하는 방식으로 ICommand를 구현할 수 없다는 것이 멍청한 느낌입니다. 작동해야하는 것처럼 느껴질 때 ... 다른 주소를 사용하여이 문제를 해결하기 전에 누군가 내가 잘못하고있는 것에 빛을 비출 수있다.

답변

0

쉬운 솔루션은 다음과 같습니다

  • 하나가 System.Windows.Input.ICommand의 자 마린 버전에 대한 자신의 구현을 제공하고이 구현을
  • 을 사용하거나 맥에 내장 된 mvvmcross 바이너리를 사용 할 수 있습니다.

첫 번째 권하고 싶습니다.

Something.Common.ICommand 코드 abd를 삭제 한 다음 MyCommand 클래스 구현을 viewmodels과 동일한 프로젝트/어셈블리에 넣으면 두 창과 Mac에서 모두 올바르게 빌드되고 실행되어야합니다.

+0

이것에 대해 자세히 설명해 주시겠습니까? 나는 커스텀 커맨드 구현을 제공해야하는 것과 같은 상황에있다. 기본적으로 \t MvxCommand를 내 ViewModel 프로젝트에 복사하고 이름을 변경하고 인터페이스를 제거했습니다. 그러나 바인딩을 사용하여 작업 할 수 없습니다. 내가해야 할 일은 뭐니? –

+0

위의 코멘트는 더 이상 적합하지 않습니다.나는 여전히 내 사용자 지정 명령을 바인딩 할 수 없지만 최신 MvvmCross 릴리스 (3.0.12)로 업데이트 성공을 거두었으며 이제는 MvxCommand를 사용하여 행복하게 구축 할 수 있습니다 (ICommand의 광기 문제는 더 이상 보이지 않습니다) –

관련 문제