2013-08-08 3 views
3

В моем проекте есть две формы WPF: Form1 и Form2. В Form1 у меня есть 1 кнопка для вызова Form2, textBox1, textBox2, textBox3, textBox4, Form2 имеет только один текстовый блок и кнопку «Сохранить». Поэтому, когда я нажимаю кнопку, он показывает Form2. В textBox я делаю шаблон текста как:Данные для привязки нескольких форм

"blablabla %txt1% blablabla %txt2% blabla %txt3% blabla" 

Нажмите кнопку «Сохранить», чтобы сохранить его. Когда возвращается Form1, textBox4 отобразит содержимое в тексте шаблона, в котором% txt1%,% txt2%,% txt3% будут меняться в зависимости от textBox1, textBox2, textBox3. Я намерен использовать MultiBinding связывать содержание в textBox1,2,3 в textBox4, это так:

<TextBox Name="textBox4"> 
<TextBox.Text> 
    <MultiBinding StringFormat = "blablabla {0} blablabla {1} blabla {2} blabla" 
    <Binding ElementName = "textBox1" Path="Text"/> 
    <Binding ElementName = "textBox2" Path="Text"/> 
    <Binding ElementName = "textBox3" Path="Text"/> 
    </MultiBinding> 
</TextBox.Text> 
</TextBox> 

И моя проблема: как получить

"blablabla {0} blablabla {1} blabla {2} blabla" 

из TextBox в Form2 и положить его StringFormat?

+0

Попробуйте получить доступ к свойству текста в 'TextBox4' как это:' string MyValue = textBox4.Text; '. Это вам нужно? –

+0

может у объяснить больше? – user2627651

+0

Вы хотите получить эту строку в коде? Если да, попробуйте получить доступ к свойству 'Text' в TextBox4. –

ответ

0

Это полный код, как получить значения из формы 2 и использовать конвертер для отображения результата в виде 1

  1. в виде 2 и получить значение из текстового поля

    // открытая форма 2 и получить значение из текстового поля

    private void button1_Click(object sender, RoutedEventArgs e) 
    { 
        var form2 = new Form2 {Owner = this}; 
        form2.ShowDialog(); 
    
        if(form2.DialogResult==true) 
        { 
         this.formatTemplate.Text = form2.DataContext as string; 
    
        } 
    } 
    

в кнопку закрытия формы 2 набора и отправить значение текстового поля для формирования 1

private void btnClose_Click(object sender, RoutedEventArgs e) 
    { 
     this.DataContext = textBox1.Text; 
     this.DialogResult = true; 
    } 

в XAML формы 1

<Window.Resources> 
     <local:Converter x:Key="converter" /> 
    </Window.Resources> 

<Grid x:Name="LayoutRoot"> 
    <StackPanel> 
     <TextBox Text="one" x:Name="textBox1" /> 
     <TextBox Text="two" x:Name="textBox2" /> 
     <TextBox Text="three" x:Name="textBox3" /> 
     <TextBox Text="" x:Name="formatTemplate" Visibility="Collapsed" /> 

     <TextBox x:Name="textBox4" > 
      <MultiBinding Converter="{StaticResource converter}"> 
       <Binding ElementName = "textBox1" Path="Text"/> 
       <Binding ElementName = "textBox2" Path="Text"/> 
       <Binding ElementName = "textBox3" Path="Text"/> 
       <Binding ElementName="formatTemplate" Path="Text" /> 
      </MultiBinding> 
     </TextBox> 
     <Button Content="Button" Height="25" Name="button1" Width="155" Click="button1_Click" /> 
    </StackPanel> 
</Grid> 

и конвертер код:

public class Converter : IMultiValueConverter 
{ 
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
    { 
     var formatsource = values[3] as string; // text value in textboxt formatTemplate 
     var re = new Regex(@"%[A-Za-z0-9]+%"); //match any text surrounded by % sign 
     var count = 0; 
     foreach (var m in re.Matches(formatsource)) 
     { 
      formatsource= re.Replace(formatsource, values[count++] as string, 1); // replace one match at the time 
     } 

     return formatsource; 
    } 

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 
Смежные вопросы