2014-04-22 2 views
1

난 ... 몇 가지 문제가 키보드 입력 이벤트를 얻기 위해 노력하고 있습니다 그래서 사용자를 눌러 키보드android에서 mvvmcross의 keypress 이벤트를 사용하는 방법은 무엇입니까?

"입력"단추를 때 이 내 뷰 모델의 일부입니다 명령 "GoContratoCommand을"실행되어 원하는 :

using System; 
using System.Collections.Generic; 
using Cirrious.MvvmCross.ViewModels; 
using MultiPage.Core.Services; 
namespace MultiPage.Core.ViewModels 
{ 
public class FirstViewModel 
    : MvxViewModel 
    { 



    private Cirrious.MvvmCross.ViewModels.MvxCommand _goContratoCommand; 
    public System.Windows.Input.ICommand GoContratoCommand 
    { 
     get{ 

       _goContratoCommand = _goContratoCommand ?? new Cirrious.MvvmCross.ViewModels.MvxCommand(inv_prod_pareja); 
        return _goContratoCommand; 
       } 

     } 


    } 
    } 

과 경로에 (당신이 그것을 호출 할 또는 뷰)이 내 활동 :보기/FirstView.cs

using Android.App; 
using Android.OS; 
using Android.Widget; 
using Cirrious.MvvmCross.Droid.Views; 

namespace MultiPage.Droid.Views 
{ 
    [Activity(Label = "View for FirstViewModel")] 
    public class FirstView : MvxActivity 
    { 
     protected override void OnCreate(Bundle bundle) 
     { 
      base.OnCreate(bundle); 
      //SetContentView(Resource.Layout.FirstView); 
      SetContentView(Resource.Layout.screen01); 
      var contrato= FindViewById<EditText>(Resource.Id.txtMembershipNumber); 
      contrato.EditorAction += EventHandlerContrato; 
     } 
     public void EventHandlerContrato(object MyObject,EditText.EditorActionEventArgs e){ 
      e.Handled = false; 
      if (e.ActionId == Android.Views.InputMethods.ImeAction.ImeNull || 
       e.ActionId == Android.Views.InputMethods.ImeAction.Next || 
       e.ActionId == Android.Views.InputMethods.ImeAction.Unspecified || 
       e.ActionId == Android.Views.InputMethods.ImeAction.None || 
       e.ActionId == Android.Views.InputMethods.ImeAction.Send || 
       e.ActionId == Android.Views.InputMethods.ImeAction.Go) 
      { 
       var algo=((Core.ViewModels.FirstViewModel)this.DataContext).GoContratoCommand; 
       e.Handled = true; 

      } 
     } 
    } 


    } 

내가 이것에 스택 해요, 당신이 나를 도울 수 내가이 컴퓨터를 어떻게 운영 할 수 있는지 알아봐. 명령을 호출하기 위해 keypress 이벤트를 사용하는 또 다른 방법은 당신이 그것에 대해 말해 주시면 고맙겠습니다. 감사합니다.

답변

2

당신은 단지 명령에 Execute를 호출 할 수

public class MyEditText : EditText 
{ 
    public MyEditText(Context c, IAttributeSet a) : base(c,a) { 
     this.EditorAction += EventHandlerContrato; 
    } 

    public ICommand KeyCommand { get;set; } 

    public void EventHandlerContrato(object MyObject,EditText.EditorActionEventArgs e){ 
     e.Handled = false; 
     if (e.ActionId == Android.Views.InputMethods.ImeAction.ImeNull || 
      e.ActionId == Android.Views.InputMethods.ImeAction.Next || 
      e.ActionId == Android.Views.InputMethods.ImeAction.Unspecified || 
      e.ActionId == Android.Views.InputMethods.ImeAction.None || 
      e.ActionId == Android.Views.InputMethods.ImeAction.Send || 
      e.ActionId == Android.Views.InputMethods.ImeAction.Go) 
     { 
      if (KeyCommand != null) { 
       KeyCommand.Execute(null); 
       e.Handled = true; 
      } 
     } 
    } 
} 

가 그 다음이 클래스를 사용할 수 있습니다 :

  var algo=((Core.ViewModels.FirstViewModel)this.DataContext).GoContratoCommand; 
      algo.Execute(null); 
재사용

은 또한 헬퍼 클래스에이 코드를 넣을 수 있습니다 귀하의 axml에 다음과 같이 입력하십시오 :

<MyEditText 
    local:MvxBind="KeyCommand TheCommand; Text TheText" /> 
+0

예! 행크스, 그리고 KeyCommand의 팁을 주셔서 감사합니다. 나는 그 일을 할 수있는 방법을 찾고있었습니다. 고마워요. 나는이 일에 초보자입니다. –

관련 문제