我想知道如何才能在EditText
的{{1}}中启用和停用修改功能。
mvvmcross
答案 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"