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;
        }
    }
posted @ 2016-05-17 22:13  Unchained Melody  阅读(750)  评论(3编辑  收藏  举报