首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Binding(五):多路绑定

Binding(五):多路绑定

作者头像
宿春磊Charles
发布2021-11-05 14:58:15
发布2021-11-05 14:58:15
1.3K00
代码可运行
举报
文章被收录于专栏:DotNet 致知DotNet 致知
运行总次数:0
代码可运行

Binding不止能绑定一个源,它还能绑定多个源,这就是我们这节要讲的多路绑定:MultiBinding。

使用多路绑定跟一般的绑定还是有区别的,首先它并不能很好的在标记扩展中使用,另外,使用多路绑定必须为其指定多路转换器,不指定的话系统不知道怎么处理从这几个源过来的数据,下面通过一个例子来讲解一下:

例子的情景是这样的,登录界面有两个文本框和一个按钮,只有当两个文本框有值的时候按钮才是可用的。

首先定义多路值转换器:

代码语言:javascript
代码运行次数:0
运行
复制
public class HasValueMultiConvert : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        if (values != null || values.Any())
        {
            if (values.Where(x => string.IsNullOrEmpty(x.ToString())).Any())
                return false;
            return true;
        }
        return false;
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

多路转换器需要继承IMultiValueConverter接口,用法跟单值转换器是一样的,就不再细说了。

前台Xaml代码如下:

代码语言:javascript
代码运行次数:0
运行
复制
<StackPanel Margin=" 20">
    <StackPanel>
        <Label>用户名:</Label>
        <TextBox x:Name="Tb_UserName" FontSize="20" Text="" />
    </StackPanel>
    <StackPanel>
        <Label>密码:</Label>
        <PasswordBox x:Name="Tb_Password" FontSize="20" Password="" />
    </StackPanel>
    <Button Content="登录" FontSize="20" Margin="0 10 0 0">
        <Button.IsEnabled>
            <MultiBinding Converter="{StaticResource HVMC}" UpdateSourceTrigger="PropertyChanged">
                <Binding Path="Text" Source="{x:Reference Tb_UserName}"/>
                <Binding Path="Password" Source="{x:Reference Tb_Password}"/>
            </MultiBinding>
        </Button.IsEnabled>
    </Button>
</StackPanel>

使用多路绑定,就得写成属性元素的形式,指定多路绑定的Converter,并且将更新设置为属性改变时,这样才能及时更新到button身上。

将这两个的Text绑定到Button的IsEnabled属性上,就能实现上述情景,效果如图:

只有当两个文本框都有值的时候登录按钮才能使用,至于为什么密码框不使用PasswordBox控件,那是因为PasswordBox控件的Password属性不是依赖属性,Binding只能绑定依赖属性,在它身上不起作用,关于依赖属性,我们下节开讲,Binding相关到此结束...

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-07-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DotNet 致知 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档