gpt4 book ai didi

c# - Xamarin Forms 最佳行为和验证

转载 作者:数据小太阳 更新时间:2023-10-29 02:07:59 25 4
gpt4 key购买 nike

我需要知道如何访问我的 View 模型这些行为的 IsValid 属性。

我宁愿你告诉我一个更健壮的行为,因为它们是从头开始制作的,我想用一些已经先进的 nuget 包进行更健壮的验证,尽管它是 Xamarin Forms 的新手。

这是我的行为,但我无法访问属性“IsValid”我的 View 模型:

  public class MesesTrabalhadosValidatorBehavior : Behavior<Entry>
{
private static readonly BindablePropertyKey IsValidPropertyKey = BindableProperty.CreateReadOnly("IsValid", typeof(bool), typeof(MesesTrabalhadosValidatorBehavior), false);

public static readonly BindableProperty IsValidProperty = IsValidPropertyKey.BindableProperty;

public bool IsValid
{
get { return (bool)base.GetValue(IsValidProperty); }
private set { base.SetValue(IsValidPropertyKey, value); }
}

private void bindable_TextChanged(object sender, TextChangedEventArgs e)
{
double result;
double.TryParse(e.NewTextValue, out result);
IsValid = result > 0;

((Entry)sender).TextColor = IsValid ? Color.Green : Color.Red;
}

protected override void OnAttachedTo(Entry bindable)
{
bindable.TextChanged += bindable_TextChanged;
}

protected override void OnDetachingFrom(Entry bindable)
{
bindable.TextChanged -= bindable_TextChanged;
}
}

我的看法:

    <Entry Placeholder="Mêses trabalhados" Text="{Binding MesesTrabalhados}" Keyboard="Numeric">
<Entry.Behaviors>
<local:MesesTrabalhadosValidatorBehavior />
</Entry.Behaviors>
</Entry>

<Entry Placeholder="Último salário" Text="{Binding Salario}" Keyboard="Numeric">
<Entry.Behaviors>
<local:SalarioValidatorBehavior />
</Entry.Behaviors>
</Entry>

<ContentView Padding="0,20,0,0">
<Button Text="Calcular" HorizontalOptions="Fill" IsEnabled="{Binding IsValid}" Command="{Binding CalcularFgtsCommand, Mode=TwoWay}"/>
</ContentView>

最佳答案

需要加一个参数,我喜欢的是命令函数,这样达到一定条件就可以调用。例如

<local:SalarioValidatorBehavior Command="{Binding MyCommandInViewModel}" />

然后是行为中的可绑定(bind)属性。

    public static readonly BindableProperty CommandProperty = BindableProperty.Create(nameof(Command), typeof(ICommand), typeof(TextChangedBehavior), null);

public ICommand Command
{
get { return (ICommand)GetValue(CommandProperty); }
set { SetValue(CommandProperty, value); }
}

void OnEntryTextChanged(object sender, TextChangedEventArgs args)
{
if (Command != null)
Command.Execute(null);
}

或者您可以在 Behavior 中使用 IsValid 属性,然后将其绑定(bind)回 ViewModel 中的属性。

<local:SalarioValidatorBehavior IsValid="{Binding IsValid, Mode=TwoWay}" />

关于c# - Xamarin Forms 最佳行为和验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37127669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com