Добавить элементы в comboBox в WPF

Когда я добавил comboBox в окно WPF, как добавить элементы в comboBox? Включить код XAML для проекта или в файл NameOfWindow.xaml.cs?

Ответы

Ответ 2

Сценарий 1 - у вас нет источника данных для элементов ComboBox
Вы можете просто заполнить ComboBox статическими значениями следующим образом -
Из XAML:

<ComboBox Height="23" Name="comboBox1" Width="120">
        <ComboBoxItem Content="X"/>
        <ComboBoxItem Content="Y"/>
        <ComboBoxItem Content="Z"/>
</ComboBox>  

Или, из CodeBehind:

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    comboBox1.Items.Add("X");
    comboBox1.Items.Add("Y");
    comboBox1.Items.Add("Z");
}  

Сценарий 2.a - у вас есть источник данных, и элементы никогда не меняются
Вы можете использовать источник данных для заполнения ComboBox. Любой тип IEnumerable может использоваться как источник данных. Вы должны назначить его ItemsSource свойство ComboBox, и это будет прекрасно (это зависит от того, как вы заполняете IEnumerable).

Сценарий 2.b - у вас есть источник данных, и элементы могут быть изменены
Вы должны использовать ObservableCollection<T> в качестве источника данных и назначить его ItemsSource свойства ComboBox (это зависит от того, как вы заполняете ObservableCollection<T>). Использование ObservableCollection<T> гарантирует, что всякий раз, когда элемент добавляется или удаляется из источника данных, это изменение немедленно отразится на пользовательском интерфейсе.

Ответ 3

Используйте этот

string[] str = new string[] {"Foo", "Bar"};

myComboBox.ItemsSource = str;
myComboBox.SelectedIndex = 0;

ИЛИ

foreach (string s in str)
    myComboBox.Items.Add(s);

myComboBox.SelectedIndex = 0;      

Ответ 4

Вы можете заполнить его из XAML или из .cs. Существует несколько способов заполнения элементов управления данными. Было бы лучше, если бы вы больше узнали о технологии WPF, это позволяет делать много вещей разными способами, в зависимости от ваших потребностей. Важнее выбрать метод, основанный на потребностях вашего проекта. Вы можете запустить здесь. Это простая статья о создании combobox и заполнении ее некоторыми данными.

Ответ 5

Существует много способов выполнить эту задачу. Вот простой:

<Window x:Class="WPF_Demo1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
     x:Name="TestWindow"
    Title="MainWindow" Height="500" Width="773">

<DockPanel LastChildFill="False">
    <StackPanel DockPanel.Dock="Top" Background="Red" Margin="2">
        <StackPanel Orientation="Horizontal" x:Name="spTopNav">
            <ComboBox x:Name="cboBox1" MinWidth="120"> <!-- Notice we have used x:Name to identify the object that we want to operate upon.-->
            <!--
                <ComboBoxItem Content="X"/>
                <ComboBoxItem Content="Y"/>
                <ComboBoxItem Content="Z"/>
            -->
            </ComboBox>
        </StackPanel>
    </StackPanel>
    <StackPanel DockPanel.Dock="Bottom" Background="Orange" Margin="2">
        <StackPanel Orientation="Horizontal" x:Name="spBottomNav">
        </StackPanel>
        <TextBlock Height="30" Foreground="White">Left Docked StackPanel 2</TextBlock>
    </StackPanel>
    <StackPanel MinWidth="200" DockPanel.Dock="Left" Background="Teal" Margin="2" x:Name="StackPanelLeft">
        <TextBlock  Foreground="White">Bottom Docked StackPanel Left</TextBlock>

    </StackPanel>
    <StackPanel DockPanel.Dock="Right" Background="Yellow" MinWidth="150" Margin="2" x:Name="StackPanelRight"></StackPanel>
    <Button Content="Button" Height="410" VerticalAlignment="Top" Width="75" x:Name="myButton" Click="myButton_Click"/>


</DockPanel>

</Window>      

Далее, у нас есть код С#:

    private void myButton_Click(object sender, RoutedEventArgs e)
    {
        ComboBoxItem cboBoxItem = new ComboBoxItem(); // Create example instance of our desired type.
        Type type1 = cboBoxItem.GetType();
        object cboBoxItemInstance = Activator.CreateInstance(type1); // Construct an instance of that type.
        List<string> myStrings = new List<string>(); // Fill a list with useful strings.
        for (int i = 0; i < 12; i++)
        {
            string newName = "stringExample" + i.ToString();
            myStrings.Add(newName);
        }
        foreach (string str in myStrings) // Generate the objects from our list of strings.
        {
            ComboBoxItem item = this.CreateComboBoxItem((ComboBoxItem)cboBoxItemInstance, "nameExample_" + str, str);
            cboBox1.Items.Add(item); // Add each newly constructed item to our NAMED combobox.
        }
    }
    private ComboBoxItem CreateComboBoxItem(ComboBoxItem myCbo, string content, string name)
    {
        Type type1 = myCbo.GetType();
        ComboBoxItem instance = (ComboBoxItem)Activator.CreateInstance(type1);
        // Here, we're using reflection to get and set the properties of the type.
        PropertyInfo Content = instance.GetType().GetProperty("Content", BindingFlags.Public | BindingFlags.Instance);
        PropertyInfo Name = instance.GetType().GetProperty("Name", BindingFlags.Public | BindingFlags.Instance);
        this.SetProperty<ComboBoxItem, String>(Content, instance, content);
        this.SetProperty<ComboBoxItem, String>(Name, instance, name);

        return instance;
        //PropertyInfo prop = type.GetProperties(rb1);
    }

Примечание. Это использование отражения. Если вы хотите узнать больше об основах рефлексии и о том, почему вы, возможно, захотите ее использовать, это отличная вступительная статья:

Если вы хотите узнать больше о том, как использовать отражение в WPF, вот некоторые ресурсы:

И если вы хотите значительно ускорить работу отражения, лучше использовать IL для этого, например:

Ответ 6

Я думаю, comboBox1.Items.Add("X"); добавит string в ComboBox вместо ComboBoxItem.

Правильное решение

ComboBoxItem item = new ComboBoxItem();
item.Content = "A";
comboBox1.Items.Add(item);

Ответ 7

С OleDBConnection → подключиться к Oracle

OleDbConnection con = new OleDbConnection();
            con.ConnectionString = "Provider=MSDAORA;Data Source=oracle;Persist Security Info=True;User ID=system;Password=**********;Unicode=True";

            OleDbCommand comd1 = new OleDbCommand("select name from table", con);
            OleDbDataReader DR = comd1.ExecuteReader();
            while (DR.Read())
            {
                comboBox_delete.Items.Add(DR[0]);
            }
            con.Close();

Что все:)