C# MVVMCross中的编辑文本编辑功能
我想知道如何才能在C# MVVMCross中的编辑文本编辑功能,c#,xml,xamarin,mvvmcross,C#,Xml,Xamarin,Mvvmcross,我想知道如何才能在mvvmcross中的EditText中启用和禁用编辑功能 <EditText style="@style/InputNumbersEditText" android:layout_weight="1" android:layout_width="0dp" android:focusable="true" android:layout_height="wrap_content" android:inputType="numberDeci
mvvmcross
中的EditText
中启用和禁用编辑功能
<EditText
style="@style/InputNumbersEditText"
android:layout_weight="1"
android:layout_width="0dp"
android:focusable="true"
android:layout_height="wrap_content"
android:inputType="numberDecimal|numberSigned"
local:MvxBind="Text Age" />
由于
android:editable=“false”
是,您应该设置android:inputType=“none”
以禁用对EditText
的输入。如果要使用MvvmCross绑定EditText
的inputType
,可以创建一个从ViewModel中获取输入值的,并返回类型为Android.Text.InputTypes
的答案
实施示例:
在Android项目中添加一个包含以下内容的类:
public class EditTextEnabledValueConverter : MvxValueConverter<bool, InputTypes>
{
protected override InputTypes Convert(bool value, Type targetType, object parameter, CultureInfo culture)
{
if (value)
return InputTypes.ClassNumber | InputTypes.NumberFlagDecimal | InputTypes.NumberFlagSigned;
return InputTypes.Null;
}
}
公共类EditTextEnabledValueConverter:MvxValueConverter
{
受保护的替代输入类型转换(布尔值、类型targetType、对象参数、CultureInfo区域性)
{
如果(值)
返回InputTypes.ClassNumber | InputTypes.NumberFlagDecimal | InputTypes.NumberFlagSigned;
返回InputTypes.Null;
}
}
在布局文件中:
<EditText
style="@style/InputNumbersEditText"
android:layout_weight="1"
android:layout_width="0dp"
android:focusable="true"
android:layout_height="wrap_content"
local:MvxBind="Text Age; InputType EditTextEnabled(MyProperty)" />
其中MyProperty是ViewModel上的可绑定布尔值。您可以使用任何类型作为源类型,它不必是布尔值。转换快乐 我用另一种方法解决了我的问题。已创建自定义绑定以绑定已启用视图的属性 自定义绑定代码
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)
{
}
}
}
为您的视图应用绑定
local:MvxBind="Text Age; Enabled IsEnable"
它工作得很好。但键盘不是数字或十进制的。这是默认的字母键盘显示。这可能是我如何使用输入类型的标志枚举的问题(我无法测试它)。尝试只返回InputTypes.NumberFlagSigned?我刚刚能够正确地测试它-这是我返回的枚举的一个问题。我已经相应地更新了我的答案。
local:MvxBind="Text Age; Enabled IsEnable"