WPF应用Binding之MultiBinding
来源:互联网 发布:温州淘宝运营培训 编辑:程序博客网 时间:2024/06/02 21:19
有时目标绑定多个源的数据,此时需要使用多路绑定MultiBinding。
本例4个TextBox(textBox1, textBox2, textBox3, textBox4)及一个按钮,当textBox1与textBox2内容相同,并且textBox3与textBox4内容相同时,Button有效。
一、方式一(通过C#进行绑定)
1. xaml
<Grid> <StackPanel> <TextBox x:Name="TextBox1" Margin="5"/> <TextBox x:Name="TextBox2" Margin="5"/> <TextBox x:Name="TextBox3" Margin="5"/> <TextBox x:Name="TextBox4" Margin="5"/> <Button x:Name="btn_Commit" Content="Commit" Margin="5" Click="btn_Commit_Click" /> </StackPanel> </Grid>
2. C#逻辑
public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); SetMultiBinding(); } private void btn_Commit_Click(object sender, RoutedEventArgs e) { } private void SetMultiBinding() { 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 }; /* MultiBinding对Add顺序敏感 */ mb.Bindings.Add(b1); mb.Bindings.Add(b2); mb.Bindings.Add(b3); mb.Bindings.Add(b4); mb.Converter = new MultiBindingConvert(); btn_Commit.SetBinding(Button.IsEnabledProperty, mb); } } /* 多路绑定数据转换 */ public class MultiBindingConvert : IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, System.Globalization.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[] targetTypes, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } }
二、方式二(通过XAML绑定)
1. xaml
<Window.Resources> <local:LogonButtonEnableConvert x:Key="lbec"/> </Window.Resources> <Grid> <StackPanel> <TextBox x:Name="TextBox1" Margin="5"/> <TextBox x:Name="TextBox2" Margin="5"/> <TextBox x:Name="TextBox3" Margin="5"/> <TextBox x:Name="TextBox4" Margin="5"/> <Button x:Name="btn_Commit" Content="Commit" Margin="5" Click="btn_Commit_Click"> <Button.IsEnabled> <MultiBinding Converter="{StaticResource lbec}" ConverterParameter="ParamTest"> <Binding ElementName="TextBox1" Path="Text"/> <Binding ElementName="TextBox2" Path="Text"/> <Binding ElementName="TextBox3" Path="Text"/> <Binding ElementName="TextBox4" Path="Text"/> </MultiBinding> </Button.IsEnabled> </Button> </StackPanel> </Grid>
2、C#数据转换类
public class LogonButtonEnableConvert : IMultiValueConverter { /* * object[] values : 所绑定的源的值 * Type targetType : 目标的类型 * object parameter : 绑定时所传递的参数 * System.Globalization.CultureInfo culture : 系统语言等信息 */ public object Convert(object[] values, Type targetType, object parameter, System.Globalization.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[] targetTypes, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } }
2 0
- WPF应用Binding之MultiBinding
- WPF之Binding基础十一 MultiBinding多路绑定
- Binding之MultiBinding
- WPF应用Binding之Path
- WPF应用Binding之Source
- WPF应用Binding之ItemsSource
- wpf中的 绑定Binding MultiBinding StringFormat格式转化问题
- WPF应用Binding之数据有效性检测
- WPF应用Binding之数据转换
- 多路Binding(MultiBinding)
- WPF 之 Binding 初解
- WPF中的MultiBinding
- WPF之Binding深入探讨
- WPF之Binding深入探讨
- WPF 之 Binding深入探讨
- WPF之Binding深入探讨
- WPF之Binding深入探讨
- WPF之Binding深入探讨
- .net视频资料分享
- Android中Bitmap,byte[],Drawable相互转化
- lua写三消游戏(一)
- 借助 C++ 进行 Windows 开发——: 异步 WinHTTP。
- 小学奥数(上)对于一个数字,我们可以直观的了解到它所含有的数字,例如: 3243中包含1个2、2个3、1个4。
- WPF应用Binding之MultiBinding
- 【游戏】Walkr - 口袋里的银河冒险:一款促使你去运动的策略游戏
- ACM 129. [USACO Mar08] 麻烦的干草打包机(BFS隐式图搜索)
- c++多态实现的机制
- RTP/RTSP/RTCP 协议详解
- centos 6.4搭建LAMP环境的phpwind
- 即时通讯开发
- Android UI开发: 横向ListView(HorizontalListView)及一个简单相册的完整实现 (附源码下载)
- UVA 100 The 3n + 1 problem(超级大水题)