c#WPF ComboBox数据不显示正确的数据

时间:2017-03-20 13:46:30

标签: c# wpf visual-studio combobox

所以我在我的Windows窗体项目中使用了以下代码,一切正常。现在我想在我的wpf项目中使用这个代码,但第二个组合框(cbFahrzeugModell)显示另一个ComboBox项的数据,idk为什么。

所以,总结一下: 2个组合框(cbFahrzeugHersteller和cbFahrzeugModell)。 如果我在cbFahrzeugHersteller中选择一个项目,那么cbFahrzeugModell应该在cbFahrzeugModell中显示相应的项目。它显示了项目,但它显示了cbFahrzeugHersteller的错误ItemIndex的数据。

       private void cbFahrzeugHersteller_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        cbFahrzeugModell.IsEnabled = true;
        cbFahrzeugModell.Items.Clear();
        cbFahrzeugModell.Text = "";

        try
        {
            connection.Open();

            OleDbCommand command = new OleDbCommand();
            command.Connection = connection;
            string query = "SELECT DISTINCT Modell FROM Autos WHERE Hersteller = @FahrzeugHersteller;";
            command.CommandText = query;
            command.Parameters.Add("@FahrzeugHersteller", SqlDbType.Text);
            command.Parameters["@FahrzeugHersteller"].Value = cbFahrzeugHersteller.Text;
            OleDbDataReader reader = command.ExecuteReader();
            while (reader.Read())
            {
                cbFahrzeugModell.Items.Add(reader["Modell"].ToString());
            }

            connection.Close();
        }
        catch (Exception ex)
        {
            System.Windows.Forms.MessageBox.Show("Error " + ex);
        }
    }

1 个答案:

答案 0 :(得分:0)

SelectionChanged事件中,Text的{​​{1}}属性将是之前的选择。尝试投射ComboBoxcbFahrzeugHersteller.SelectedValuecbFahrzeugHersteller.SelectedItem是另一种选择。我猜这些中的任何一个都是字符串,但是因为你没有说e.AddedItems[0]它可能是什么。如果是这种情况,您需要设置断点并通过在监视窗口中检查这些属性来确切地确定断点。

如果您尝试将Winforms代码直接转换为WPF,您将遇到无穷无尽的问题。这两个框架有着深刻的不同。如果您打算坚持使用WPF,那么您应该学习MVVM并按照自己的方式学习WPF。尝试在WPF中编写Winforms代码是一种让自己痛苦的保证。

衡量WPF中cbFahrzeugHersteller属性的重要性的是,在每天专业编写WPF五年并回答有关Stack Overflow的问题之后,我发现ComboBox.Text System.Windows.Controls.ComboBox属性。