gpt4 book ai didi

c# - 多表单绑定(bind)数据

转载 作者:行者123 更新时间:2023-11-30 18:32:55 26 4
gpt4 key购买 nike

我的项目有两个 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 中的内容绑定(bind)到 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"

从 Form2 中的 textBox 并将其放入 StringFormat?

最佳答案

这是如何从表单 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;
}

在表单 1 的 XAML 中

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

关于c# - 多表单绑定(bind)数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18129879/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com