我在屏幕上有一个textview和一个按钮。用户点击显示键盘的文本视图,用户键入一些文本,然后单击其onclick绑定到视图模型中定义的命令的按钮。
我想通过在视图中发送消息或调用方法来从视图模型中取消键盘,但仍然希望保持视图与视图模型之间的松散耦合。我看到mvvmmessenger,mvxinteraction等可以完成此任务。处理此问题的最佳方法是什么?
答案 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();
}
}