One of the features I most enjoy in WPF is the MultiBinding class, which allows you to take several source properties, pass their values to an IMultiValueConverter implementation, and bind the result to a single target property!
By now you’re probably thinking “why do I need that?”, but in certain specific scenarios, having the possibility to take several values and produce a single result directly in the UI can be quite useful!
Take this sample from MSDN:
<TextBlock DataContext="{StaticResource NameListData}">  <TextBlock.Text>    <MultiBinding Converter="{StaticResource myNameConverter}"                  ConverterParameter="FormatLastFirst">      <Binding Path="FirstName"/>      <Binding Path="LastName"/>    </MultiBinding>  </TextBlock.Text></TextBlock>We can easily infer that the objective here is to set the TextBlock.Text property to the result of “LastName, FirstName”, given the two properties from the specified TextBlock.DataContext and a custom IMultiValueConverter instance called myNameConverter.
While useful, the MultiBinding is not available for Windows Phone developers - queue the whining…
I’ve seen a few alternative implementations around the internet, but none seems easy (and light!) enough to me, so I just decided to make my own!
On the latest release of Cimbalino Windows Phone Toolkit I added the MultiBindingBehavior, a quick and easy approach to solve the missing MultiBinding support in Windows Phone!
Here’s an example using the same scenario from above:
<TextBlock DataContext="{StaticResource NameListData}">    <i:Interaction.Behaviors>        <cimbalinoBehaviors:MultiBindingBehavior Converter="{StaticResource myNameConverter}" ConverterParameter="FormatLastFirst" PropertyName="Text">            <cimbalinoBehaviors:MultiBindingItem Value="{Binding FirstName}" />            <cimbalinoBehaviors:MultiBindingItem Value="{Binding LastName}" />        </cimbalinoBehaviors:MultiBindingBehavior>    </i:Interaction.Behaviors></TextBlock>The major difference here is the usage of MultiBindingBehavior.PropertyName, as we can’t bind the target property directly, it will be up to the behavior to get/set the value. All the rest of the code is really quite self explanatory!
Here’s another sample using two TextBox controls to input the FirstName and LastName values:
<TextBox x:Name="FirstNameTextBox" /><TextBox x:Name="LastNameTextBox" /><TextBlock Style="{StaticResource PhoneTextLargeStyle}">    <i:Interaction.Behaviors>        <cimbalinoBehaviors:MultiBindingBehavior Converter="{StaticResource myNameConverter}" ConverterParameter="FormatLastFirst" PropertyName="Text">            <cimbalinoBehaviors:MultiBindingItem Value="{Binding Text, ElementName=FirstNameTextBox}" />            <cimbalinoBehaviors:MultiBindingItem Value="{Binding Text, ElementName=LastNameTextBox}" />        </cimbalinoBehaviors:MultiBindingBehavior>    </i:Interaction.Behaviors></TextBlock>You can set the MultiBindingBehavior.Converter property to any IValueConverter instance (knowing that the value parameter is always an object[] instance) but I’ve also added an abstract MultiValueConverterBase that you can inherit and implement quite easily!