如何解决在Xamarin中输入条目时需要输入值
在我的应用程序中,有多个Entry
和Button
。
我想要的是Entry
不应为空,如果为空,则Button
将不起作用。例如就像HTML中的必填属性一样。
我问了Picker这样的类似问题,但是这种解决方案不适用于Entry
。
视图中的输入和按钮代码
<Entry
Text="{Binding Email}"
Keyboard="Email"
ReturnType="Done"
Placeholder="Enter Email">
</Entry>
<Entry
Text="{Binding Password}"
Keyboard="Numeric"
IsPassword="true"
ReturnType="Done"
Placeholder="Enter Password">
</Entry>
<Button
Text="Submit"
Command="{Binding FormDataButtonCommand}"/>
#region Bindable Command
public ICommand FormDataButtonCommand => new Command(async () => await FormDataButton(default,default));
#endregion
#region Bindable Properties
private string _Email;
public string Email
{
get => _Email;
set => this.RaiseAndSetIfChanged(ref _Email,value);
}
private string _Password;
public string Password
{
get => _Password;
set => this.RaiseAndSetIfChanged(ref _Password,value);
}
解决方法
ICommand
构造函数cat采用第二个参数CanExecute。您应该使用它来启用/禁用命令:
public ICommand FormDataButtonCommand { get; set; }
...
FormDataButtonCommand = new Command(FormDataButton,CanFormData); // in ctor
public bool CanFormData(object obj)
{
return !string.IsNullOrWhiteSpace(Email) && !string.IsNullOrWhiteSpace(Password);
}
private async void FormDataButton(object obj)
{
// your logic here
}
,
<ContentPage.Resources>
<local:AnyNullValueCheckConverter x:Key="AnyNullValueCheckConverter" />
</ContentPage.Resources>
...
<Button>
<Button.IsEnabled>
<MultiBinding Converter="{StaticResource AnyNullValueCheckConverter}">
<Binding Path="Email" />
<Binding Path="Password" />
</MultiBinding>
</Button.IsEnabled>
</Button>
转换器
public class AnyNullValueCheckConverter: IMultiValueConverter
{
public object Convert(object[] values,Type targetType,object parameter,CultureInfo culture)
{
if (values == null)
{
return false;
}
foreach (var value in values)
{
if (value is string str && string.IsNullOrEmpty(str))
{
return false;
}
}
return true;
}
public object[] ConvertBack(object value,Type[] targetTypes,CultureInfo culture)
{
throw new NotImplementedException();
}
}
您可以将其用于其他值,例如Button.TextColor而不是false返回Color.Gray,而不是true返回Color.Black。像这样的东西。
,我非常喜欢https://www.reactiveui.net,并大量使用WhenAny...
Observable
和所有很酷的反应性内容
但是正如@Miamy所说的那样,该命令将被禁用,但是如果您要更改颜色或样式,我会这样做
<Entry
Text="{Binding Email}"
Keyboard="Email"
ReturnType="Done"
Placeholder="Enter Email">
</Entry>
<Entry
Text="{Binding Password}"
Keyboard="Numeric"
IsPassword="true"
ReturnType="Done"
Placeholder="Enter Password">
</Entry>
<Button
Text="Submit"
IsEnabled="{Binding IsButtonEnabled}"
Command="{Binding FormDataButtonCommand}"/>
private string _Email;
public string Email
{
get => _Email;
set {
IsButtonEnabled = !string.IsNullOrEmpty(value) && !string.IsNullOrEmpty(Password);
this.RaiseAndSetIfChanged(ref _Email,value);
}
}
private string _Password;
public string Password
{
get => _Password;
set {
IsButtonEnabled = !string.IsNullOrEmpty(value) && !string.IsNullOrEmpty(Email);
this.RaiseAndSetIfChanged(ref _Password,value);
}
}
private bool _IsButtonEnabled;
public bool IsButtonEnabled
{
get => _IsButtonEnabled;
set => this.RaiseAndSetIfChanged(ref _IsButtonEnabled,value);
}
不喜欢这样做,但是这是更简单的方法... IMO
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。