【问题标题】:Bind two Combox绑定两个 Combox
【发布时间】:2014-11-20 14:11:58
【问题描述】:

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

我想将我的第二个组合框“pSize”与“itemlist”绑定。我想从 itemlist 中获取值并传递给根据参数从数据库中为“pSize”生成项目的方法。我试图绑定它但没有工作。

【问题讨论】:

  • 当 itemsList selectedItem 发生变化时,您是否要求一些事件?

标签: c# sql-server wpf binding combobox


【解决方案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}" />

不要忘记将UserControlWindowDataContext 设置为声明和填充Item 属性的类的实例。阅读 MSDN 上的 Data Binding Overview 页面可能也会使您受益。

【讨论】:

  • 使用这种方法,我必须在我的应用程序中更改很多东西,你能告诉我像我在问题中告诉你的简单方法吗?我只想在 itemList 更改时将参数传递给方法。
  • 使用这种方法我必须在我的应用程序中更改很多东西...这就是重点!如果您不想正确编程,则必须请教其他人。我只会向您展示如何编写正确的 WPF 方式。
【解决方案2】:

您最好创建一个模型,并将其应用于每个 Combobox。现在,您可以编写业务逻辑,使用数据库中的数据在此模型中生成 pSize 项。

您还可以使用 LINQ 对每个 List 元素应用一些方法,并将结果(List)与您的 pSize 绑定。

List<T> newList = items.ForEach(item=> someMethod(item));

在你的情况下,T 是字符串(如我所见)。

同时查看thisthis 线程。

【讨论】:

  • 我想将 pSize 绑定到 itemsList,并获取 itemsList 的值并将其传递给方法。因此该方法为 pSize 生成项目。我只想知道如何将 pSize 与获取 itemsList 值的方法绑定
  • 它是单向绑定,itemsList 没有绑定
  • @BurhanakaSLIMSHADY ,然后使用 LINQ 方法。
【解决方案3】:

最简单的方法,无需列出清单。我自己找到的:

private void itemsList_DropDownClosed(object sender, EventArgs e)
{
   MessageBox.Show(itemsList.Text) 
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-24
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多