MVVMCross中的EditText编辑功能

时间:2016-06-06 18:40:15

标签: c# xml xamarin mvvmcross

我想知道如何才能在EditText的{​​{1}}中启用停用修改功能。

mvvmcross

2 个答案:

答案 0 :(得分:5)

由于android:editable="false"deprecated,您应设置android:inputType="none"以禁用EditText上的输入。如果您希望将inputType的{​​{1}}与MvvmCross绑定,则可以创建一个Value Converter,它从ViewModel获取输入值,并返回类型为{的回答{1}}。

示例实施:

在您的Android项目中添加一个类,其中包含以下内容:

EditText

并在您的布局文件中:

Android.Text.InputTypes

其中MyProperty是ViewModel上的可绑定布尔值。您可以使用任何类型作为源类型,它不必是布尔值。转换快乐!

答案 1 :(得分:1)

我用其他方法解决了我的问题。创建自定义绑定以绑定 View Enabled 属性。

自定义绑定的代码

public class ViewEnabledTargetBinding : MvxPropertyInfoTargetBinding<View>
{
    // used to figure out whether a subscription to MyPropertyChanged       

    public override MvxBindingMode DefaultMode => MvxBindingMode.TwoWay;

    public ViewEnabledTargetBinding(object target, PropertyInfo targetPropertyInfo)
        : base(target, targetPropertyInfo)
    {
    }

    // describes how to set MyProperty on MyView
    protected override void SetValueImpl(object target, object value)
    {
        var view = target as View;
        if (view == null) return;

        view.Enabled = (bool)value;
    }

    // is called when we are ready to listen for change events
    public override void SubscribeToEvents()
    {
        var view = View;
        if (view == null)
        {
            //MvxBindingTrace.Trace(MvxTraceLevel.Error, "Error - checkbox is null in CheckboxCheckedTargetBinding");
            return;
        }
    }       

    // clean up
    protected override void Dispose(bool isDisposing)
    {
        base.Dispose(isDisposing);

        if (isDisposing)
        {

        }
    }
}

在setup.cs文件中注册自定义绑定类。

protected override void FillTargetFactories(IMvxTargetBindingFactoryRegistry registry)
{
    base.FillTargetFactories(registry);

    registry.RegisterPropertyInfoBindingFactory(
            typeof(ViewEnabledTargetBinding),
            typeof(View), "Enabled");
}

为视图应用绑定

 local:MvxBind="Text Age; Enabled IsEnable"