我试图有两个数字条目(如果它们是数字)启用按钮。如果没有启用该按钮。我创建了一个示例应用程序来测试这一点。
到目前为止,我尝试创建了一个类,该类检查它是否是双精度型,如果是双精度型,则将文本更改为绿色,如果不是双精度型,则将文本更改为红色。这样可行。我在按钮中尝试了多重触发条件。我的想法是检查输入文本颜色是红色还是绿色来控制按钮。我将我的代码放在下面。
public class NumericValidationTriggerAction : TriggerAction<Entry>
{
protected override void Invoke (Entry entry)
{
double result;
bool isValid = Double.TryParse(entry.Text, out result);
entry.TextColor = isValid ? Colors.Black : Colors.Red;
}
}
<StackLayout>
<Label FontSize="20"
Text="EventTrigger Example"/>
<Label Text="Text must be a valid double or it will turn red"/>
<Entry x:Name="email"
Placeholder="Enter a System.Double"
>
<Entry.Triggers>
<EventTrigger Event="TextChanged">
<local:NumericValidationTriggerAction/>
</EventTrigger>
</Entry.Triggers>
</Entry>
<Button
Text="Save"
IsEnabled="False">
<Button.Triggers>
<MultiTrigger TargetType="Button">
<MultiTrigger.Conditions>
<BindingCondition Binding="{Binding Source={x:Reference email}, Path=Double.TryParse.email}" Value="Green"/>
</MultiTrigger.Conditions>
</MultiTrigger>
</Button.Triggers>
</Button>
</StackLayout>
您没有使用[模型-视图-视图模型],这就是它复杂的原因。
想想这个:
<Entry x:Name="email" TextChanged="email_TextChanged" Placeholder="Enter a System.Double" />
在后面的代码中您可以访问其他控件:
private void email_TextChanged(object sender, TextChangedEventArgs e)
{
//Your Actions here
double result;
bool isValid = Double.TryParse(email.Text, out result);
email.TextColor = isValid ? Colors.Black : Colors.Red;
//Set name to your button in Xaml to access it here
MyButton.IsEnabled = isValid;
}