c# - Xamarin 中的表单验证
问题描述
在我的 Xamarin 应用程序中,表单是动态的,这意味着表单是从 API 获取的。然后我从 ViewModel 中的动态表单中获取条目值,并在 multipart/form-data 中的数组中将其发送到服务器。
视图模型
public class Form
{
public string name { get; set; }
public string label { get; set; }
public string Value { get; set; }
}
private ObservableCollection<Form> _form = new ObservableCollection<Form>();
public ObservableCollection<Form> Form
{
get => _form;
set => this.RaiseAndSetIfChanged(ref _form, value);
}
public ObservableCollection<Form> Value
{
get => _form;
set => this.RaiseAndSetIfChanged(ref _form, value);
}
.XAML
<StackLayout BindableLayout.ItemsSource="{Binding Form}">
<BindableLayout.ItemTemplate>
<DataTemplate>
<Entry x:Name="{Binding name}"
Text="{Binding Value}"
Placeholder="{Binding label}">
</Entry>
</DataTemplate>
</BindableLayout.ItemTemplate>
</StackLayout>
现在,我只想检查Form.Value
(对于所有字段)是否不为空。基本上,我在.xaml
页面中有一个按钮,默认情况下禁用,所以如果所有字段都已填写,则启用该按钮(使用可绑定属性)。
我写了这段代码,但问题是,如果最后一个条目被填充而其他条目为空,它将启用按钮。
foreach (var item in Value.ToList())
{
if (!(string.IsNullOrEmpty(item.Value)))
{
IsEnabledSubmitButton = true;
}
}
解决方案
你的逻辑是倒退的。对于验证,您通常希望从表单有效的假设开始,然后检查是否有任何单个字段无效,使表单无效。
IsEnabledSubmitButton = true;
foreach (var item in Value.ToList())
{
if (string.IsNullOrEmpty(item.Value))
{
IsEnabledSubmitButton = false;
}
}