MultiBinding 多绑定

MultiBinding 允许绑定多个源

子元素是指定绑定到各种属性上的Binding元素

例如下面:使用MultiBinding多绑定 通过子元素Binding指定了Person类中的LastName和FirstName属性,

需要使用多值转换器,把多个值转换为一个。(实现IMultiValueConverter接口)

这个转换器使用了一个参数(通过ConverterParameter指定的)

这个转换器参数values是从数据源中接收的多个值

参数parameter(通过ConverterParameter指定的),根据参数进行不同的转换



Person数据类

    public class Person
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }


前台XAML

<Window x:Class="WpfApplication1.MultiBindingWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib"  xmlns:local="clr-namespace:WpfApplication1.com.Data"
        Title="多绑定" Height="300" Width="500">
    <Window.Resources>
        <local:Person x:Key="person1" FirstName="Tom" LastName="Turbo"/>
        <local:PersonNameConverter x:Key="personNameConverter"/>
    </Window.Resources>
    <Grid DataContext="{StaticResource person1}">
        
        <StackPanel>
            <TextBox>
                <TextBox.Text>
                    <MultiBinding Converter="{StaticResource personNameConverter}" ConverterParameter="LastFirst">
                        <Binding Path="FirstName"/>
                        <Binding Path="LastName"/>
                    </MultiBinding>
                </TextBox.Text>
            </TextBox>


            <TextBox>
                <TextBox.Text>
                    <MultiBinding Converter="{StaticResource personNameConverter}">
                        <MultiBinding.ConverterParameter>
                            <system:String>FirstLast</system:String>
                        </MultiBinding.ConverterParameter>
                        <Binding Path="FirstName"/>
                        <Binding Path="LastName"/>
                    </MultiBinding>
                </TextBox.Text>
            </TextBox>
        </StackPanel>
        
    </Grid>
</Window>


以上代码不需要后台代码,数据源放在了Window.Resources中

以上两个TextBox使用的ConverterParameter方式不一样,第二种需要添加xmlns:system="clr-namespace:System;assembly=mscorlib 引用空间







PersonNameConverter多值转换器

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Data;

namespace WpfApplication1.com.Data
{
    public class PersonNameConverter : IMultiValueConverter
    {
        public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
        {
            switch(parameter as string)
            {
                case "FirstLast":
                    return values[0] + " " + values[1];
                case "LastFirst":
                    return values[1] + "," + values[0];
                default:
                    return "";
            }
        }

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




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值