复杂的多重绑定验证

时间:2013-04-01 09:00:50

标签: c# wpf imultivalueconverter

我有一个包含多个字段的表单。我还有一个“验证”按钮,用于操作数据库输入。我希望只有在用户定义了最小字段时才会激活按钮。

到目前为止,它非常简单,因为所有字段都是文本:

<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;
    }
}

但是现在必须考虑额外的复选框,条件应该是 [检查这些复选框中的任何一个+以前定义的文本字段 - &gt;激活验证按钮]

<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>

你知道我怎么能这样做吗?

谢谢你!

1 个答案:

答案 0 :(得分:2)

转换器是这项工作的错误工具。您应该查看验证,命令和视图模型。您的视图模型将实现验证逻辑并公开您的按钮绑定的命令。只有在验证逻辑通过时,该命令才可执行。