In questo semplice esempio vedremo come utilizzare la Classe MultibindingLa classe MultiBinding consente di associare una proprietà di destinazione dell'associazione a un elenco di proprietà di origine e di applicare quindi una logica per produrre un valore con gli input specificati. In questo esempio viene mostrato come utilizzare la classe MultiBinding per visualizzare più proprietà della Classe Customer in una sola riga all'interno di un controllo ListBox.

Utilizzeremo una ObservableCollection , la quale rappresenta una raccolta di dati dinamica che fornisce notifiche quando gli elementi vengono aggiunti, rimossi, o se l'elenco di tutto è aggiornato.

La implementeremo da codebheind andando ad implementare una classe chiamata Customer , composta a sua volta da 5 proprietà , ma vediamo il codice c#.

using System.Windows;
using System.Collections.ObjectModel;

namespace WpfApplication1
{
    /// <summary>
    /// Logica di interazione per MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void ButtonClick(object sender, RoutedEventArgs e)
        {
            /* Creiamo una ObservableCollection di tipo Customer 
             * andando a valorizzare le sue proprietà*/
            var customerList = new ObservableCollection<Customer>
                                   {
                                       new Customer
                                           {
                                               Name = "Carmelo",
                                               Surname = "La Monica",
                                               Address = "indirizzo",
                                               Email = "email",
                                               PhoneNumber = "telefono",
                                           }
                                   };

            /* Assegniamo alla proprietà ItemSource del controllo ListBox 
             * il contenuto di customerlist*/
            listbox1.ItemsSource = customerList;
        }

        // La classe Customer con le cinque proprietà
        private class Customer
        {
            public string Name { get; set; }
            public string Surname { get; set; }
            public string PhoneNumber { get; set; }
            public string Address { get; set; }
            public string Email { get; set; }
        }
    }
}

L'obbiettivo come detto e andare a visualizzare all'interno di un controllo ListBox il nome e cognome di una persona per ogni riga , dal momento che la proprietà DisplayMemberPath ci permette di visualizzare solamente una proprietà per volta e non due , ecco che ci viene in aiuto il Multibinding , ma vediamo come implementarlo nel codice dichiarativo XAML.

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <ListBox x:Name="listbox1" IsSynchronizedWithCurrentItem="True" 
      HorizontalAlignment= "Left" Height="100" Margin="63,49,0,0" VerticalAlignment="Top" Width="213">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <TextBlock>
                        <TextBlock.Text>
                            <MultiBinding StringFormat="{}{0} {1}">
                                <Binding Path="Name"/>
                                <Binding Path="Surname"/>
                            </MultiBinding>
                        </TextBlock.Text>
                    </TextBlock>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
        <Button Content="Button" HorizontalAlignment="Left" Margin="63,178,0,0" VerticalAlignment="Top" Width="75" Click="ButtonClick"/>
    </Grid>
</Window>

Definiamo un controllo ListBox e creiamo un ItemTemplate , al suo interno come e possibile notare abbiamo inserito un controllo TextBock ,quest'ultimo implementa il Multibinding in modo che possiamo definire quali proprietà vogliamo poi visualizzare ,esegue anche la formattazione della visualizzazione StringFormat="{}{0} {1}" in modo da visualizzare sulla stessa riga le proprietà Name e Surname della Classe Customer.
Eseguendo a runtime questo codice alla pressione del pulsante Button1 avremo questa situazione.

 

Ecco come verrà visualizzato all'interno del controllo ListBox un valore composto da due proprietà della Classe Customer , senza il multibinding avremo dovuto ricorrere ad altri sistemi, esempio definire una proprietà NomeCognome nella classe Customer ed andare a valorizzarla con il nome e cognome , poi assegnarla o in binding al controllo ListBox nello XAML , o valorizzarla da codebheind mediante la proprietà DisplayMemberPath.