Question

I posted my question before: Multi-Forms Binding data

I solved it by building Converter.

XAML:

<Window x:Class="Test_MultiBinding.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="621"
        xmlns:c="clr-namespace:Test_MultiBinding">
    <Window.Resources>
        <c:myConverter x:Key="TestConverter"/>
    </Window.Resources>

    <Grid>
        <TextBox TextWrapping="Wrap" AcceptsReturn="True" Height="269" HorizontalAlignment="Left" Margin="376,22,0,0" Name="textBox1" VerticalAlignment="Top" Width="211" >
            <TextBox.Text>
                <MultiBinding Converter="{StaticResource TestConverter}">
                    <Binding ElementName="textBox2" Path="Text"/>
                    <Binding ElementName="textBox3" Path="Text"/>
                    <Binding ElementName="textBox4" Path="Text"/>
                    <Binding ElementName="textBox5" Path="Text"/>
                    <Binding ElementName="textBox6" Path="Text"/>
                </MultiBinding>
             </TextBox.Text>
        </TextBox>
        <TextBox Height="40" HorizontalAlignment="Left" Margin="130,24,0,0" Name="textBox2" VerticalAlignment="Top" Width="222"/>
        <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="12,22,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />
        <TextBox Height="40" HorizontalAlignment="Left" Margin="130,70,0,0" Name="textBox3" VerticalAlignment="Top" Width="222" />
        <TextBox Height="40" HorizontalAlignment="Left" Margin="130,116,0,0" Name="textBox4" VerticalAlignment="Top" Width="222" />
        <TextBox Height="40" HorizontalAlignment="Left" Margin="130,162,0,0" Name="textBox5" VerticalAlignment="Top" Width="222" />
        <TextBox Height="91" HorizontalAlignment="Left" Margin="130,208,0,0" Name="textBox6" VerticalAlignment="Top" Width="222" />
    </Grid>
</Window>

MainWindow:

namespace Test_MultiBinding
{
    public partial class MainWindow : Window
    {
        ......
    }
    [ValueConversion(typeof(string), typeof(string))]
    public class myConverter : IValueConverter
    {
        public Object Convert(object[] value, Type targettype, object parameter, System.Globalization.CultureInfo cultreinfo)
        {
            return str1 + value[0].ToString() + str2 + value[1].ToString() + str3 + value[2].ToString() + str4 + value[3].ToString() + str5 + value[4].ToString() + str6;
        }

        public Object ConvertBack(object value, Type targettype, object parameter, System.Globalization.CultureInfo cultreinfo)
        {
            throw new NotImplementedException();
        }
    }

}

In which str1,2,3,... are string. When I run it, I got error:

An object of the type "Test_MultiBinding.myConverter" cannot be applied to a property that expects the type "System.Windows.Data.IMultiValueConverter"

Please help!

Was it helpful?

Solution

For a MultiBinding you have to implement the IMultiValueConverter Interface instead of IValueConverter.

public class myConverter : IMultiValueConverter

OTHER TIPS

public class MultiStringConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        string result = "";

        foreach(object value in values)
            result += value.ToString();

        return result;
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top