共用方式為


HOW TO:根據繫結項目的清單產生值

MultiBinding 可讓您將繫結目標屬性 (Property) 繫結至來源屬性清單,然後套用邏輯以用這些輸入產生一個值。 這個範例會示範 MultiBinding 的用法。

範例

在下列範例中,NameListData 參考 PersonName 物件的集合,這些物件都包含兩個屬性 (Property):firstName 和 lastName。 下列範例產生的 TextBlock 會顯示一個人的名字和姓氏,先列出姓氏再列出名字。

<Window
  xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:c="clr-namespace:SDKSample"
  x:Class="SDKSample.Window1"
  Width="400"
  Height="280"
  Title="MultiBinding Sample">
    
  <Window.Resources>
    <c:NameList x:Key="NameListData"/>
    <c:NameConverter x:Key="myNameConverter"/>


...


</Window.Resources>


...


<TextBlock Name="textBox2" DataContext="{StaticResource NameListData}">
  <TextBlock.Text>
    <MultiBinding Converter="{StaticResource myNameConverter}"
                  ConverterParameter="FormatLastFirst">
      <Binding Path="FirstName"/>
      <Binding Path="LastName"/>
    </MultiBinding>
  </TextBlock.Text>
</TextBlock>


...


</Window>

為了要了解名字-姓氏這樣的格式是如何產生,我們一起看看 NameConverter 的實作:

Public Class NameConverter
    Implements IMultiValueConverter

Public Function Convert1(ByVal values() As Object, _
                         ByVal targetType As System.Type, _
                         ByVal parameter As Object, _
                         ByVal culture As System.Globalization.CultureInfo) As Object _
                         Implements System.Windows.Data.IMultiValueConverter.Convert
    Select Case CStr(parameter)
        Case "FormatLastFirst"
            Return (values(1) & ", " & values(0))
    End Select
    Return (values(0) & " " & values(1))
End Function

Public Function ConvertBack1(ByVal value As Object, _
                             ByVal targetTypes() As System.Type, _
                             ByVal parameter As Object, _
                             ByVal culture As System.Globalization.CultureInfo) As Object() _
                             Implements System.Windows.Data.IMultiValueConverter.ConvertBack
    Return CStr(value).Split(New Char() {" "c})
End Function
End Class
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;
    }
}

NameConverter 會實作 IMultiValueConverter 介面。 NameConverter 會從個別繫結取得值,然後將這些值儲存在 values 物件陣列中。 在 MultiBinding 項目下的 Binding 項目出現順序,就是這些值在陣列中的儲存順序。 Converter 方法的 parameter 引數會參考 ConverterParameter 屬性 (Attribute) 的值,這個方法會對參數執行開關,以決定姓名的格式。

請參閱

工作

HOW TO:轉換繫結的資料

概念

資料繫結概觀

其他資源

資料繫結 HOW TO 主題