复杂的多绑定验证
本文关键字:验证 绑定 复杂 | 更新日期: 2023-09-27 18:06:53
我有一个有多个字段的表单。我也有一个"验证"按钮,将采取DB输入。我希望按钮只有在用户定义了最小字段时才被激活。
到目前为止,它非常简单,因为所有的字段都是文本:
<Button x:Name="Manage" Content="Manage">
<Button.IsEnabled>
<MultiBinding Mode="OneWay" Converter="{StaticResource FieldsFilledinToVisible}">
<Binding ElementName="name1" Path="Text"/>
<Binding ElementName="name2" Path="Text"/>
</MultiBinding>
</Button.IsEnabled>
</Button>
转换器:
public class AllValuesDefinedConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
bool isEnabled = false;
for (int i = 0; i < values.Length; i++)
{
isEnabled = isEnabled || string.IsNullOrEmpty(values[i].ToString());
}
return !isEnabled;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
return null;
}
}
但是现在必须考虑额外的复选框,其中的条件应该是[选中这些复选框中的任何一个+先前定义的文本字段->激活验证按钮]:
<WrapPanel Style="{StaticResource WrapStyle_Inputs}">
<CheckBox Content="Check1" IsChecked="{Binding Checked1, Mode=TwoWay}"/>
<CheckBox Content="Check2" IsChecked="{Binding Checked2, Mode=TwoWay}"/>
<CheckBox Content="Check3" IsChecked="{Binding Checked3, Mode=TwoWay}"/>
</WrapPanel>
你知道我该怎么做吗?
谢谢!
转换器是错误的工具。相反,您应该查看验证、命令和视图模型。视图模型将实现验证逻辑并公开按钮绑定到的命令。该命令只有在验证逻辑通过时才可执行。