WPF 多值绑定(MultiBinding)详解

📅 发布时间:2026/7/15 0:41:01 👁️ 浏览次数:
WPF 多值绑定(MultiBinding)详解
1. 是什么MultiBinding 把多个值绑定到一个属性上例如姓名 年龄 → 显示为 “张三 (20 岁)”用户名 密码 → 同时判断登录按钮是否可用宽度 高度 → 计算控件大小2. 核心IMultiValueConverter多值转换器把多个值合成一个值给 UI。3. 示例 1多文本拼接姓名 年龄步骤 1创建多值转换器using System; using System.Globalization; using System.Windows.Data; public class StringJoinConverter : IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { // values[0] 姓名values[1] 年龄 if (values[0] null || values[1] null) return ; return ${values[0]} ({values[1]} 岁); } // 一般不用 public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) { throw new NotImplementedException(); } }步骤 2UI 绑定MultiBindingxmlTextBlock TextBlock.Text MultiBinding Converter{StaticResource StringJoinConverter} Binding PathUserName / !-- 第1个值 -- Binding PathAge / !-- 第2个值 -- /MultiBinding /TextBlock.Text /TextBlock步骤 3注册转换器xmlWindow.Resources local:StringJoinConverter x:KeyStringJoinConverter/ /Window.Resources4. 示例 2多条件判断用户名 密码都不为空才启用按钮转换器public class LoginEnableConverter : IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { if (values[0] is string user !string.IsNullOrWhiteSpace(user) values[1] is string pwd !string.IsNullOrWhiteSpace(pwd)) { return true; } return false; } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) { throw new NotImplementedException(); } }UI 使用xmlButton Content登录 Button.IsEnabled MultiBinding Converter{StaticResource LoginEnableConverter} Binding PathUserName / Binding PathPassword / /MultiBinding /Button.IsEnabled /Button效果用户名、密码都输入内容按钮才可以点击。三、超级完整版 Demo可直接复制运行ViewModelpublic class MainViewModel : ViewModelBase { // 数据绑定 private string _userName; public string UserName { get _userName; set SetProperty(ref _userName, value); } private int _age; public int Age { get _age; set SetProperty(ref _age, value); } // 命令绑定 public ICommand ShowInfoCommand { get; set; } public MainViewModel() { ShowInfoCommand new RelayCommand(() { MessageBox.Show($姓名{UserName}\n年龄{Age}); }); } }UIxmlStackPanel Margin20 TextBox Text{Binding UserName, UpdateSourceTriggerPropertyChanged} Placeholder姓名/ TextBox Text{Binding Age} Margin0 5 Placeholder年龄/ !-- 多值绑定 -- TextBlock FontSize18 Margin0 10 TextBlock.Text MultiBinding Converter{StaticResource StringJoinConverter} Binding PathUserName / Binding PathAge / /MultiBinding /TextBlock.Text /TextBlock !-- 命令绑定 -- Button Content显示信息 Command{Binding ShowInfoCommand} / /StackPanel四、核心总结多值绑定MultiBinding一个属性绑定多个数据源必须配合IMultiValueConverter常用场景文本拼接、多条件判断、组合数据语法结构固定xmlMultiBinding Converter... Binding Path... / Binding Path... / /MultiBinding