在Xamarin Android中从MVVMCross中的视图模型关闭键盘

时间:2019-06-03 03:35:04

标签: xamarin xamarin.android

我在屏幕上有一个textview和一个按钮。用户点击显示键盘的文本视图,用户键入一些文本,然后单击其onclick绑定到视图模型中定义的命令的按钮。

我想通过在视图中发送消息或调用方法来从视图模型中取消键盘,但仍然希望保持视图与视图模型之间的松散耦合。我看到mvvmmessenger,mvxinteraction等可以完成此任务。处理此问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

不知道这是否是处理此问题的最佳方法,但希望我做的方法可以对您有所帮助。

我在Core项目中创建了一个名为IPlatformAction的接口,该接口实现了一种名为DismissKeyboard的方法。

 public interface IPlatformAction
 {
     void DismissKeyboard();
 }

然后,我在Droid项目中提供了一个名为PlatformActionService的服务,该服务实现了该接口。

public class PlatformService : IPlatformAction
{
    protected Activity CurrentActivity =>
        Mvx.IoCProvider.Resolve<IMvxAndroidCurrentTopActivity>().Activity;

    public void DismissKeyboard()
    {
        var currentFocus = CurrentActivity.CurrentFocus;
        if (currentFocus != null)
        {
            InputMethodManager inputMethodManager = (InputMethodManager)CurrentActivity.GetSystemService(Context.InputMethodService);
            inputMethodManager.HideSoftInputFromWindow(currentFocus.WindowToken, HideSoftInputFlags.None);
        }
    }

}

最后,我将接口插入到viewmodel中并调用dismiss键盘方法

public class SomeViewModel : BaseViewModel<SomeModel>
{

    private readonly IPlatformAction _platformAction;

    public SomeViewModel(IPlatformAction platformAction)
    {
        _platformAction = platformAction;
    }

    public async Task DoSomething() 
    {
        //Some code 
        _platformAction.DismissKeyboard();
    }

}