我的WPF应用程序中有两个组合框。
<ComboBox x:Name="itemsList" HorizontalAlignment="Left" Margin="10,90.767,0,0" VerticalAlignment="Top" Width="215" IsEditable="True" Height="23"/>
<ComboBox x:Name="pSize" HorizontalAlignment="Left" Margin="230,90.767,0,0" VerticalAlignment="Top" Width="109.538" Height="23" IsEditable="True" />
第一个组合框从数据库中获取具有此功能的项目,我在应用程序加载时初始化
void getAllItems()
{
conn.Open();
SqlCommand cmd = new SqlCommand("SELECT DISTINCT item_name FROM items", conn);
SqlDataAdapter da = new SqlDataAdapter(cmd);
cmd.ExecuteNonQuery();
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
String items = dr.GetString(0);
itemsList.Items.Add(items);
}
conn.Close();
}
我想绑定我的第二个组合框&#34; pSize&#34;使用&#34; itemlist&#34;。我想从itemlist中获取值并传递给为&#34; pSize&#34;生成项目的方法。根据参数从数据库。我试图绑定它但不工作。
答案 0 :(得分:1)
如果你想使用WPF,那么你应该正确使用它,而不像那样像你正在做的WinForms。在WPF中,我们不会以编程方式向UI控件添加项目。相反,我们将项添加到集合,然后将数据绑定到UI控件。通过这种方式,我们可以将相同的集合数据绑定到我们喜欢的尽可能多的UI控件。所以,尝试这样的事情:
private ObservableCollection<string> items = new ObservableCollection<string>();
public ObservableCollection<string> Items
{
get { return items; }
set { items = value; NotifyPropertyChanged("Items"); }
}
...
void getAllItems()
{
conn.Open();
SqlCommand cmd = new SqlCommand("SELECT DISTINCT item_name FROM items", conn);
SqlDataAdapter da = new SqlDataAdapter(cmd);
cmd.ExecuteNonQuery();
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
String items = dr.GetString(0);
Items.Add(items);
}
conn.Close();
}
...
<ComboBox ItemsSource="{Binding Items}" />
不要忘记将DataContext
或UserControl
的{{1}}设置为声明并填充Window
属性的类的实例。您可能还会从阅读MSDN上的Data Binding Overview页面中受益。
答案 1 :(得分:0)
您最好创建一个模型,并将其应用于每个Combobox。现在,您可以使用数据库中的数据对业务逻辑进行编码,以在此模型中生成pSize项目。
您还可以使用LINQ将一些方法应用于每个List元素,并将结果(List)与pSize绑定。
List<T> newList = items.ForEach(item=> someMethod(item));
其中T是字符串,在你的情况下(如我所见)。
答案 2 :(得分:0)
最简单的方法,无需列出清单。我发现它是我的自我:
private void itemsList_DropDownClosed(object sender, EventArgs e)
{
MessageBox.Show(itemsList.Text)
}