你的位置:首页 > ASP.net教程

[ASP.net教程]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;    }  }