首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复杂MultiBinding验证

复杂MultiBinding验证
EN

Stack Overflow用户
提问于 2013-04-01 09:00:49
回答 1查看 357关注 0票数 0

我有一个有多个字段的表单。我也有一个“验证”按钮,它将操作一个DB输入。我希望只有当用户定义的最小字段为时,才能激活该按钮。

到目前为止,这是相当简单的,因为所有字段都是文本:

代码语言:javascript
复制
<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>

转换器为:

代码语言:javascript
复制
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;
    }
}

但是现在必须考虑额外的复选框,其中的条件应该是--所有这些复选框中的任何复选框+前面定义的文本字段->激活验证按钮

代码语言:javascript
复制
<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>

你知道我是怎么做到的吗?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-01 09:04:21

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15740473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档