複数のエントリを持つListViewがあります。それぞれ、私は別の値と比較される値を入力する必要があります(値がより大きいか等しい場合に有効です)。 Submitボタンをタップすると、ListViewのすべてのエントリが有効かどうかを確認できるソリューションを実装する必要があります。Xamarin。ボタンをクリックしてListView内のエントリ値を検証する方法
私はビヘイビアを使用して一種の検証を実装しましたが、有効でないときにエントリ値をハイライト表示し、ボタンには影響しません。
<ListView x:Name="lstRegistadores" ItemsSource="{Binding Contador.Registadores}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Entry x:Name="txtValue" Text="{Binding Corrente.Valor}" >
<Entry.Behaviors>
<local:RegistadorValidatorBehavior />
</Entry.Behaviors>
</Entry>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
<Button x:Name="btnSubmit" Text="Confirmar" />
public class RegistadorValidatorBehavior : Behavior<Entry>
{
static readonly BindablePropertyKey IsValidPropertyKey = BindableProperty.CreateReadOnly("IsValid", typeof(bool), typeof(RegistadorValidatorBehavior), false);
public static readonly BindableProperty IsValidProperty = IsValidPropertyKey.BindableProperty;
public bool IsValid
{
get { return (bool)base.GetValue(IsValidProperty); }
private set { base.SetValue(IsValidPropertyKey, value); }
}
protected override void OnAttachedTo(Entry bindable)
{
bindable.TextChanged += HandleTextChanged;
base.OnAttachedTo(bindable);
}
protected override void OnDetachingFrom(Entry bindable)
{
bindable.TextChanged -= HandleTextChanged;
base.OnDetachingFrom(bindable);
}
void HandleTextChanged(object sender, TextChangedEventArgs e)
{
var entry = sender as Entry;
var registador = (Registador)entry.BindingContext;
var compareTo = registador.Ultimo.Valor;
int valor;
IsValid = (int.TryParse(e.NewTextValue,out valor) && valor >= compareTo) ;
entry.TextColor = IsValid ? Color.Default : Color.Red;
}
}
誰も私に進むべき道を示すことができますか?