如何在mvvmcross中使edittext可聚焦

时间:2013-10-22 07:02:38

标签: xamarin.android xamarin mvvmcross

我想知道viewmodel属性是否存在一个绑定机制,它在我选择的特定编辑文本中提供焦点(光标闪烁或指示textedit具有焦点的东西)。

1 个答案:

答案 0 :(得分:2)

这是一个普遍的Mvvm问题 - 比如MVVM Focus To Textbox

就像在一般问题中一样,在MvvmCross中,您可以在View中的某些代码中执行此操作。例如,您可以创建一个辅助类,如:

    public class Helper
    {
        private Activity _a;

        public Helper(Activity a)
        {
            _a = a;
        }

        // TODO - this should probably be a ViewModel-specific enum rather than a string
        private string _focussedName;
        public string FocussedName
        {
            get { return _focussedName; }
            set 
            { 
                _focussedName = value;
                var mapped = MapFocussedNameToControlName(_focussedName);
                var res = _a.Resources.GetIdentifier(mapped, "id", _a.PackageName);
                var view = _a.FindViewById(res); 
                view.RequestFocus();
            }
        }

        private string MapFocussedNameToControlName(string value)
        {
            // TODO - your mapping here...
            return value;
        }
    }

然后可以将其绑定在ViewOnCreate中作为:

    private Helper _helper;

    protected override void OnCreate (Bundle bundle)
    {
        base.OnCreate (bundle);

        // Set our view from the "main" layout resource
        SetContentView (Resource.Layout.main);

        _helper = new Helper(this);
        this.CreateBinding(_helper)
                    .For(h => h.FocussedName)
                    .To<MyViewModel>(x => x.FocusName)
                    .OneWay()
                    .Apply();
    }

此代码未经过测试 - 但应该大致有效。