数据绑定(十一)多路绑定MultiBinding
2024-09-30 14:31:30
有时候UI要显示的信息又不止一个数据来源决定,就需要使用MultiBinding,MultiBinding具有一个名为Bindings的属性,其类型是Collection<BindingBase>,通过这个属性MultiBinding把一组Binding对象聚合起来,处在这个集合中的Binding对象可以拥有自己的数据校验与转换机制,它们汇集起来的数据将共同决定传往MultiBinding目标的数据。
举例:有如下界面
<StackPanel Background="LightBlue">
<TextBox x:Name="textBox1" Height="23" Margin="5" />
<TextBox x:Name="textBox2" Height="23" Margin="5,0" />
<TextBox x:Name="textBox3" Height="23" Margin="5" />
<TextBox x:Name="textBox4" Height="23" Margin="5" />
<Button x:Name="button1" Content="Submit" Width="80" Margin="5" />
</StackPanel>
后台代码中设置MultiBinding
Binding b1 = new Binding("Text") { Source = textBox1 };
Binding b2 = new Binding("Text") { Source = textBox2 };
Binding b3 = new Binding("Text") { Source = textBox3 };
Binding b4 = new Binding("Text") { Source = textBox4 }; MultiBinding mb = new MultiBinding() { Mode = BindingMode.OneWay };
mb.Bindings.Add(b1);
mb.Bindings.Add(b2);
mb.Bindings.Add(b3);
mb.Bindings.Add(b4);
mb.Converter = new LogonMultiBindingConverter();
button1.SetBinding(Button.IsEnabledProperty, mb);
转换器由于需要对多个值进行转换,所以需要使用IMultiValueConverter的派生类进行转换,转换器代码
class LogonMultiBindingConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
if (!values.Cast<string>().Any(Text => string.IsNullOrEmpty(Text))
&& values[0].ToString() == values[1].ToString()
&& values[2].ToString() == values[3].ToString())
{
return true;
} return false;
} public object[] ConvertBack(object value, Type[] targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
运行效果如图
当第一行和第二行的内容相同,并且,第三行和第四行的内容相同时,Submit按钮可用,否则Submit不可用
最新文章
- WPF 自定义Expander
- iOS - 沙盒与目录
- oracle 执行 delete user$ 误删所有用户信息后的数据恢复流程
- MATLAB元胞数组
- Acdream1217 Cracking&#39; RSA(高斯消元)
- linux rpm命令
- Linux 内核链表
- nginx启动过程分析
- Java Web整合开发(12) -- JDBC
- Java中线程的yield(),sleep()以及wait()的区别
- linux deepin 无线网卡不能用,打不开
- BZOJ2808 : 那些年我们画格子
- PAT A1150 Travelling Salesman Problem (25 分)——图的遍历
- 谷歌大规模机器学习:模型训练、特征工程和算法选择 (32PPT下载)
- 查询表Or列的注释信息
- Linux下设置固定IP的方法
- 蜗牛—ORACLE基础之学习(二)
- YOLOv3-darknet 内容解析
- Rigidbody中 Angular Drag (角阻力):
- PHP之string之addcslashes()函数使用