gpt4 book ai didi

c# - 复制一个文本框,包括它的绑定(bind)

转载 作者:太空宇宙 更新时间:2023-11-03 12:14:06 26 4
gpt4 key购买 nike

我有很多文本框分布在三个单独的 TabItem 上,我想为用户提供选择最喜欢的文本框的选项,并为方便起见将它们显示在一个名为 Favorites 的 tabItem 上。

视觉部分工作正常,但我似乎无法让绑定(bind)工作,所以新的文本框保持为空。

XAML:

<StackPanel Grid.Row="3" Grid.Column="0" x:Name="SP_TB_DP_ArticleName"     x:Uid="ArticleName" Style="{StaticResource FavButton}"  MouseDown="FavButton_Click" >
<Label Content="ArticleName" Style="{StaticResource Heading2}" />
<Border Background="Transparent">
<StackPanel Orientation="Horizontal">
<Path Uid="FavAdd" Style="{StaticResource Ico-AddFav}" Fill="Black"/>
<Path Uid="FavRem" Style="{StaticResource Ico-RemFav}" Fill="Black" Visibility="Collapsed" />
</StackPanel>
</Border>
</StackPanel>
<TextBox x:Name="TB_DP_ArticleName" Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="2" Style="{StaticResource Heading3}" Text="{Binding Article.Name, UpdateSourceTrigger=PropertyChanged}" />

绑定(bind)的 C#

private void FavButton_Click(object sender, MouseButtonEventArgs e)
{
[... creating textbox and label]

//BindingName is the name of the original textbox ie: TB_DP_ArticleName
DependencyObject OriginalTB = (DependencyObject) this.FindName(BindingName);
BindingBase BB = BindingOperations.GetBindingBase(OriginalTB, TextBox.TextProperty);
var oldBind = BB as Binding;

//Clone Method from other question Link see below *
//BindingBase copyBind= CloneBinding(BB, OriginalTB);


if (OriginalTB != null)
{
Binding binding = new Binding();
binding.Source = this;
binding.Path = oldBind.Path;
binding.Mode = BindingMode.OneWay;
binding.IsAsync = false;
binding.UpdateSourceTrigger = UpdateSourceTrigger.Default;
binding.TargetNullValue = "null";
BindingOperations.SetBinding(tb, TextBox.TextProperty, binding);
//BindingOperations.SetBinding(tb, TextBox.TextProperty, copyBind);
}

//Code to add the Textbox to the Grid
[...]

*) 我尝试了来自 Binding does not have a Clone method, whats an effective way to copy it 的克隆方法但这也不起作用。

在调试过程中,oldBind.Path显示了 Article.Name 的正确路径。

但最终以编程方式创建的文本框不会显示原始文本框的内容。它只是空着。

最佳答案

我终于明白了!

我必须将绑定(bind)源设置为原始 TextBox 并将绑定(bind)设置为文本。这并不能 100% 地回答问题,因为这可能不是关于@AlvinfromDiaspar 评论的最有效解决方案 Keep two textboxes synchronized in WPF但无论如何,它足以满足我的目的。

我改变了什么:

绑定(bind) binding = new Binding("Text");binding.Source = (DependencyObject)this.FindName(BindingName);

绑定(bind)的完整片段:

String BindingName = inName.Substring(3);

BindingBase BB = BindingOperations.GetBindingBase(
(DependencyObject)this.FindName(BindingName),
TextBox.TextProperty);

var oldBind = BB as Binding;

if (BB != null)
{
//the magic goes here
Binding binding = new Binding("Text");
binding.Source = (DependencyObject)this.FindName(BindingName);

binding.Mode = BindingMode.OneWay;
binding.IsAsync = false;
binding.UpdateSourceTrigger = UpdateSourceTrigger.Default;
binding.TargetNullValue = "null";
BindingOperations.SetBinding(tb, TextBox.TextProperty, binding);
}

关于c# - 复制一个文本框,包括它的绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50584156/

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