首页 > 解决方案 > 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;
    }
}

标签: c#.netxamarinxamarin.forms

解决方案


你的逻辑是倒退的。对于验证,您通常希望从表单有效的假设开始,然后检查是否有任何单个字段无效,使表单无效。

IsEnabledSubmitButton = true;

foreach (var item in Value.ToList())
{
    if (string.IsNullOrEmpty(item.Value))
    {
        IsEnabledSubmitButton = false;
    }
}

推荐阅读