zoukankan      html  css  js  c++  java
  • WPF多源绑定

    将控件绑定到多个数据源,ListBox绑定到一个集合,其中每一项绑定到集合中对象的两个属性,并对绑定进行了格式化。

    <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;
            }
        }
  • 相关阅读:
    C# listView载入图片以大图标方式显示
    判断序列是否对称
    非走不可的弯路
    张国荣的《我》
    函数:找出一句话中的第二个单词
    压缩与解压缩示例:游标编码(runlength encoding)
    前行
    书单
    一个数组中的元素头尾两端依次对调
    第一遍读书笔记
  • 原文地址:https://www.cnblogs.com/guofeiji/p/5503404.html
Copyright © 2011-2022 走看看