2013-08-09 6 views
0

Я отправил свой вопрос раньше: Multi-Forms Binding dataMultiBinding Ошибка

Я решил его строить конвертер.

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(); 
     } 
    } 

} 

В каких str1,2,3, ... есть строка. Когда я запустил его, у меня возникла ошибка:

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

Помогите!

ответ

3

Для MultiBinding вы должны ввести IMultiValueConverter Interface вместо IValueConverter.

public class myConverter : IMultiValueConverter 
+0

Ok я редактировал его и запустить снова, я получил эту ошибку: Test_MultiBinding.myConverter 'не реализует член интерфейса' System.Windows.Data.IMultiValueConverter.ConvertBack (объект, System.Type [], object, System.Globalization.CultureInfo) ' – user2627651

+0

Если вы переходите назад, вам также потребуется реализовать часть ConvertBack. – Nick

+0

@ user2627651 Конечно. Вы должны реализовать участников. Подпись 'Convert' и' ConvertBack' не такая же, как в IValueConverter. См. Образец в ссылке. – LPL

1
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(); 
    } 
}