WPF多源绑定
2016-05-17 22:13
183 查看
将控件绑定到多个数据源,ListBox绑定到一个集合,其中每一项绑定到集合中对象的两个属性,并对绑定进行了格式化。
多源绑定的自定义值转换。下面TextBlock控件绑定到NameListData集合中的一项,当集合中的某个对象被选择后,该对象的两个属性同自定义转换器转换为显示值,对象的两个属性分别是FirstName和LastName,通过转换器,控件显示完整的姓名。这类似上述的多源绑定的格式化,但转换器可以接受参数,因此更灵活,此处,可以通过参数控制FirstName和LastName的显示顺序。
下面是自定义转换器的实现,该类必须实现接口IMultiValueConverter,其中Convert实现数据源到控件方向的转换,而ConvertBack相反:
<ListBox ItemsSource="{StaticResource MyData}" IsSynchronizedWithCurrentItem="True"> <ListBox.ItemTemplate> <DataTemplate> <TextBlock> <TextBlock.Text> <MultiBinding StringFormat="{}{0} -- Now only {1:C}!"> <Binding Path="Description"/> <Binding Path="Price"/> </MultiBinding> </TextBlock.Text> </TextBlock> </DataTemplate> </ListBox.ItemTemplate> </ListBox>
多源绑定的自定义值转换。下面TextBlock控件绑定到NameListData集合中的一项,当集合中的某个对象被选择后,该对象的两个属性同自定义转换器转换为显示值,对象的两个属性分别是FirstName和LastName,通过转换器,控件显示完整的姓名。这类似上述的多源绑定的格式化,但转换器可以接受参数,因此更灵活,此处,可以通过参数控制FirstName和LastName的显示顺序。
<TextBlock Name="textBox1" DataContext="{StaticResource NameListData}"> <TextBlock.Text> <MultiBinding Converter="{StaticResource myNameConverter}" ConverterParameter="FormatNormal"> <Binding Path="FirstName"/> <Binding Path="LastName"/> </MultiBinding> </TextBlock.Text> </TextBlock>
下面是自定义转换器的实现,该类必须实现接口IMultiValueConverter,其中Convert实现数据源到控件方向的转换,而ConvertBack相反:
public class NameConverter : IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { string name; switch ((string)parameter) { case "FormatLastFirst": name = values[1] + ", " + values[0]; break; case "FormatNormal": default: name = values[0] + " " + values[1]; break; } return name; } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) { string[] splitValues = ((string)value).Split(' '); return splitValues; } }
相关文章推荐
- Tomcat的使用
- 485时序图
- 【Android 第三方SDK】第三方推送服务--个推
- tomcat启用GZIP压缩
- ubuntu 关闭防火墙
- 编译windows版nginx-rtmp-module
- spring统一管理异常和访问日志
- 身份证效验
- mac 第一次安装mysql 5.7.12 不知道root 密码的解决办法
- eclipse怎么修改工作空间路径
- centos 安装 tmux
- 指针、引用和取值
- red5源码分析---13
- 内核log打印级别
- MySQL 'type=InnoDB' 错误
- Java基础第八天听课总结(2)--多线程&Thread
- 16位单周期CPU设计
- 程序员的谎谬之言还是至理名言?
- iOS之网络请求的简单封装
- strcpy函数与memcpy函数(区别及实现 )