39

ComboBox を WPF ウィンドウに追加した場合、項目を ComboBox に追加するにはどうすればよいですか? デザインまたは NameOfWindow.xaml.cs ファイルの XAML コードを int しますか?

4

7 に答える 7

63

ケース 1 - データソースがない場合:

ComboBox次のように静的な値を入力するだけです-

  1. XAML から:
<ComboBox Height="23" Name="comboBox1" Width="120">
    <ComboBoxItem Content="Alice"/>
    <ComboBoxItem Content="Bob"/>
    <ComboBoxItem Content="Charlie"/>
</ComboBox>
  1. CodeBehind から - 1:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
    comboBox1.Items.Add("Alice");
    comboBox1.Items.Add("Bob");
    comboBox1.Items.Add("Charlie");
}
  1. CodeBehind から - 2:
// insert item at specified index of populated ComboBox
private void Window_Loaded(object sender, RoutedEventArgs e)
{
    comboBox1.Items.Insert(2, "Alice");
    comboBox1.Items.Insert(5, "Bob");
    comboBox1.Items.Insert(8, "Charlie");
}

ケース 2 - データソースがあり、アイテムが変更されない:

データ ソースを使用して、ComboBox. 任意 IEnumerableの型をデータ ソースとして使用できます。あなたはできる -

  1. ItemsSource次のようにプロパティをXAMLデータソースにバインドします-
<!-- MyDataSource is an IEnumerable type property in ViewModel -->
<ComboBox Height="23" Width="120" ItemsSource="{Binding MyDataSource}" />
  1. ItemsSource次のように、コード ビハインドでデータ ソースをプロパティに割り当てます。
private void Window_Loaded(object sender, RoutedEventArgs e)
{
    comboBox1.ItemsSource = new List<string> { "Alice", "Bob", "Charlie" };
}

ケース 3 - データソースがあり、項目が変更される可能性がある

  1. をデータソースとして使用する必要がありますObservableCollection<T>
  2. プロパティをデータ ソースにバインドする必要があります(上記のように)。ItemsSourceXAML
  3. コード ビハインドでデータ ソースをプロパティに割り当てることができItemsSourceます (上記のように)。

を使用するObservableCollection<T>と、アイテムがデータ ソースに追加または削除されるたびに、変更がすぐに UI に反映されます。にどのように入力するかはあなた次第ですObservableCollection<T>

于 2012-08-09T07:55:54.320 に答える
41

ObservableCollectionを構築してそれを利用することをお勧めします

public ObservableCollection<string> list = new ObservableCollection<string>();
list.Add("a");
list.Add("b");
list.Add("c");
this.cbx.ItemsSource = list;

cbx はコモボボックス名です

また読む:List、ObservableCollection、およびINotifyPropertyChangedの違い

于 2012-08-09T07:07:44.120 に答える
11

これを使って

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

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

また

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

myComboBox.SelectedIndex = 0;      
于 2012-08-09T06:57:56.987 に答える
4

XAML または .cs から入力できます。コントロールにデータを入力する方法はいくつかあります。WPF テクノロジについて詳しくお読みになることをお勧めします。WPF テクノロジを使用すると、ニーズに応じてさまざまな方法で多くのことを行うことができます。プロジェクトのニーズに基づいて方法を選択することがより重要です。ここから開始できます。コンボボックスを作成し、データを入力する簡単な記事です。

于 2012-08-09T06:59:01.730 に答える
0

このタスクを実行するには多くの方法があります。ここに簡単なものがあります:

<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>      

次に、C# コードがあります。

    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.
        for (int i = 0; i < 12; i++)
        {
            string newName = "stringExample" + i.ToString();
           // Generate the objects from our list of strings.
            ComboBoxItem item = this.CreateComboBoxItem((ComboBoxItem)cboBoxItemInstance, "nameExample_" + newName, newName);
            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 を使用するのが最善です。

于 2013-10-19T04:14:57.980 に答える
-1

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();

それで全部です :)

于 2015-08-18T08:20:38.220 に答える
-1

の代わりに ComboBox にcomboBox1.Items.Add("X");追加すると思います。stringComboBoxItem

正しい解決策は

ComboBoxItem item = new ComboBoxItem();
item.Content = "A";
comboBox1.Items.Add(item);
于 2015-03-13T04:19:46.263 に答える