以编程方式在 WPF 中为来自动态组合框的动态文本框设置数据绑定
Programmatically Set Data Binding in WPF for Dynamic TextBoxes from a Dynamic ComboBox
这部分有效。
在我的 C#.NET WPF XAML 中,我有一个 static ComboBox 和一个 static TextBox。 TextBox 显示同一数据表中的另一列(在 ComboBox 的 ItemSource 中)。 "rr_code" 列是公司名称列,"rr_addr" 列是地址列。
<ComboBox x:Name="CompanyComboBox1" IsEditable="True" IsTextSearchEnabled="True" IsSynchronizedWithCurrentItem="False"/>
<TextBox x:Name="StreetTextBox1" DataContext="{Binding SelectedItem, ElementName=CompanyComboBox1}" Text="{Binding rr_addr}" IsManipulationEnabled="True"\>
ComboBox 以编程方式从 DataTable 中的列中读取:
CompanyComboBox1.ItemsSource = Rails.DefaultView; // Rails is a DataTable
CompanyComboBox1.DisplayMemberPath = "rr_code"; // column name for company name
这部分不工作
问题是,我现在有一个 "Add Company" 按钮可以在 StackPanel 中创建一个新表单,动态地 并且具有这个确切的功能。 ComboBox 完全按预期工作。这是我目前所拥有的:
ComboBox companyComboBox = new ComboBox();
companyComboBox.ItemsSource = Rails.DefaultView;
companyComboBox.IsEditable = true;
companyComboBox.IsTextSearchEnabled = true;
companyComboBox.DisplayMemberPath = "rr_code";
问题出在 TextBox 中,当我更改动态 companyComboBox 时它没有更新,所以我确定它与绑定有关。
TextBox streetTextBox = new TextBox();
streetTextBox.DataContext = companyComboBox;
Binding b = new Binding("rr_addr");
b.Mode = BindingMode.Default;
b.Source = companyComboBox.SelectedItem;
streetTextBox.SetBinding(ComboBox.SelectedItemProperty, b);
为 TextBox streetTextBox 设置绑定的正确方法是什么?
为什么要设置 TextBox DataContext?
您只需将 TextBox.Text 属性 绑定到 XAML
中的 ComboBox SelectedItem
<TextBox Text="{Binding ElementName=CompanyComboBox1, Path=SelectedItem.rr_addr}"></TextBox>
此特定 XAML + C# 数据绑定在纯 C# 中的等效代码是:
ComboBox companyComboBox = new ComboBox();
companyComboBox.ItemsSource = Rails.DefaultView; // Rails being DataTable
companyComboBox.IsEditable = true;
companyComboBox.IsTextSearchEnabled = true;
companyComboBox.DisplayMemberPath = "rr_code";
Binding b = new Binding("SelectedItem.rr_addr"); // The selected item's 'rr_addr' column ...
b.Source = companyComboBox; // ... of the companyComboBox ...
TextBox streetTextBox = new TextBox();
streetTextBox.SetBinding(TextBox.TextProperty,b); // ... is bound to streetTextBox's Text property.
错误在最后一行。 SetBinding 需要有一个 属性 的目标,而不是源。此外,出于某种原因,绑定声明需要 "SelectedItem."。
这部分有效。
在我的 C#.NET WPF XAML 中,我有一个 static ComboBox 和一个 static TextBox。 TextBox 显示同一数据表中的另一列(在 ComboBox 的 ItemSource 中)。 "rr_code" 列是公司名称列,"rr_addr" 列是地址列。
<ComboBox x:Name="CompanyComboBox1" IsEditable="True" IsTextSearchEnabled="True" IsSynchronizedWithCurrentItem="False"/>
<TextBox x:Name="StreetTextBox1" DataContext="{Binding SelectedItem, ElementName=CompanyComboBox1}" Text="{Binding rr_addr}" IsManipulationEnabled="True"\>
ComboBox 以编程方式从 DataTable 中的列中读取:
CompanyComboBox1.ItemsSource = Rails.DefaultView; // Rails is a DataTable
CompanyComboBox1.DisplayMemberPath = "rr_code"; // column name for company name
这部分不工作
问题是,我现在有一个 "Add Company" 按钮可以在 StackPanel 中创建一个新表单,动态地 并且具有这个确切的功能。 ComboBox 完全按预期工作。这是我目前所拥有的:
ComboBox companyComboBox = new ComboBox();
companyComboBox.ItemsSource = Rails.DefaultView;
companyComboBox.IsEditable = true;
companyComboBox.IsTextSearchEnabled = true;
companyComboBox.DisplayMemberPath = "rr_code";
问题出在 TextBox 中,当我更改动态 companyComboBox 时它没有更新,所以我确定它与绑定有关。
TextBox streetTextBox = new TextBox();
streetTextBox.DataContext = companyComboBox;
Binding b = new Binding("rr_addr");
b.Mode = BindingMode.Default;
b.Source = companyComboBox.SelectedItem;
streetTextBox.SetBinding(ComboBox.SelectedItemProperty, b);
为 TextBox streetTextBox 设置绑定的正确方法是什么?
为什么要设置 TextBox DataContext?
您只需将 TextBox.Text 属性 绑定到 XAML
中的 ComboBox SelectedItem<TextBox Text="{Binding ElementName=CompanyComboBox1, Path=SelectedItem.rr_addr}"></TextBox>
此特定 XAML + C# 数据绑定在纯 C# 中的等效代码是:
ComboBox companyComboBox = new ComboBox();
companyComboBox.ItemsSource = Rails.DefaultView; // Rails being DataTable
companyComboBox.IsEditable = true;
companyComboBox.IsTextSearchEnabled = true;
companyComboBox.DisplayMemberPath = "rr_code";
Binding b = new Binding("SelectedItem.rr_addr"); // The selected item's 'rr_addr' column ...
b.Source = companyComboBox; // ... of the companyComboBox ...
TextBox streetTextBox = new TextBox();
streetTextBox.SetBinding(TextBox.TextProperty,b); // ... is bound to streetTextBox's Text property.
错误在最后一行。 SetBinding 需要有一个 属性 的目标,而不是源。此外,出于某种原因,绑定声明需要 "SelectedItem."。