Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将项目添加到WPF中的组合框_C#_Wpf - Fatal编程技术网

C# 将项目添加到WPF中的组合框

C# 将项目添加到WPF中的组合框,c#,wpf,C#,Wpf,当我将组合框添加到WPF窗口时,如何将项目添加到组合框?为设计或在NameOfWindow.XAML.cs文件中输入XAML代码?使用此选项 string[] str = new string[] {"Foo", "Bar"}; myComboBox.ItemsSource = str; myComboBox.SelectedIndex = 0; 或 您可以从XAML或.cs填充它。用数据填充控件的方法很少。您最好阅读更多关于WPF技术的信息,它允许您根据需要以多种方式完成许多事情。更重要的

当我将组合框添加到WPF窗口时,如何将项目添加到组合框?为设计或在NameOfWindow.XAML.cs文件中输入XAML代码?

使用此选项

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

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


您可以从XAML或.cs填充它。用数据填充控件的方法很少。您最好阅读更多关于WPF技术的信息,它允许您根据需要以多种方式完成许多事情。更重要的是根据您的项目需要选择方法。你可以开始了。这是一篇关于创建combobox并用一些数据填充它的简单文章。

最好构建并利用它

public ObservableCollection<string> list = new ObservableCollection<string>();
list.Add("a");
list.Add("b");
list.Add("c");
this.cbx.ItemsSource = list;
公共ObservableCollection列表=新ObservableCollection(); 列表。添加(“a”); 列表。添加(“b”); 列表。添加(“c”); this.cbx.ItemsSource=列表; cbx是combobox名称


另请阅读:

案例1-您没有数据源:

您只需使用静态值填充
组合框
,如下所示-

  • 从XAML:
  • 
    
  • 从CodeBehind-1:
  • private void Window\u已加载(对象发送方,路由目标)
    {
    comboBox1.Items.Add(“Alice”);
    comboBox1.Items.Add(“Bob”);
    comboBox1.Items.Add(“Charlie”);
    }
    
  • 从CodeBehind-2:
  • //在填充的组合框的指定索引处插入项
    已加载私有无效窗口(对象发送器、路由目标)
    {
    组合框1.项目。插入(2,“Alice”);
    组合框1.项目。插入(5,“Bob”);
    组合框1.项目。插入(8,“查理”);
    }
    
    案例2-您有一个数据源,并且项目永远不会更改:

    您可以使用数据源填充
    组合框
    。任何
    IEnumerable
    类型都可以用作数据源。你可以-

  • XAML
    中的
    ItemsSource
    属性绑定到数据源,如-
  • 
    
  • 将数据源分配给代码隐藏中的
    ItemsSource
    属性,如-
  • private void Window\u已加载(对象发送方,路由目标)
    {
    comboBox1.ItemsSource=新列表{“Alice”、“Bob”、“Charlie”};
    }
    
    案例3-您有一个数据源,项目可能会发生更改

  • 应使用
    可观察收集
    作为数据源
  • 应该将
    XAML
    中的
    ItemsSource
    属性绑定到数据源(如上所示)
  • 可以将数据源分配给代码隐藏中的
    ItemsSource
    属性(如上所示)

  • 使用
    ObservableCollection
    可确保无论何时向数据源添加或从数据源中删除项,更改都会立即反映在UI上。这取决于您如何填充
    ObservableCollection

    执行此任务的方法有很多种。这里有一个简单的例子:

    <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>      
    
    
    左停靠堆垛板2
    底部停靠的StackPanel左侧
    
    接下来,我们有C代码:

    private void myButton\u单击(对象发送者,路由目标)
    {
    ComboBoxItem cboBoxItem=new ComboBoxItem();//创建所需类型的示例实例。
    Type type1=cboBoxItem.GetType();
    对象cboBoxItemInstance=Activator.CreateInstance(type1);//构造该类型的实例。
    对于(int i=0;i<12;i++)
    {
    string newName=“stringExample”+i.ToString();
    //从字符串列表生成对象。
    ComboBoxItem=this.createComboxItem((ComboBoxItem)cboBoxItemInstance,“nameExample_”+newName,newName);
    cboBox1.Items.Add(item);//将每个新构造的项添加到命名的组合框中。
    }
    }
    私有ComboxItem CreateComboxItem(ComboBoxItem myCbo、字符串内容、字符串名称)
    {
    Type type1=myCbo.GetType();
    ComboBoxItem实例=(ComboBoxItem)Activator.CreateInstance(type1);
    //这里,我们使用反射来获取和设置类型的属性。
    PropertyInfo Content=instance.GetType().GetProperty(“Content”,BindingFlags.Public | BindingFlags.instance);
    PropertyInfo Name=instance.GetType().GetProperty(“Name”,BindingFlags.Public | BindingFlags.instance);
    this.SetProperty(内容、实例、内容);
    this.SetProperty(名称、实例、名称);
    返回实例;
    //PropertyInfo prop=type.GetProperties(rb1);
    }
    
    注意:这是使用反射。 如果您想了解更多关于反射的基础知识以及使用反射的原因,这是一篇很好的介绍性文章:

    如果您想了解有关如何将反射具体用于WPF的更多信息,请参阅以下参考资料:

    如果您想大幅提高反射的性能,最好使用IL来实现,如下所示:


    我认为
    comboBox1.Items.Add(“X”)
    将把
    字符串
    添加到组合框中,而不是
    组合框项

    正确的解决办法是

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

    使用OLEDB连接->连接到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();
    

    仅此而已:)

    很好,工作正常!但是,如果我想要像“Your options:”这样的组合框的名称或标题,那么我想我只是在数组中首先添加它,但是当进行选择时,我会选中它,这样索引0就不会被激活!?还是有更好的办法?不,我有两次“你的选择”!?它在“按钮”上,但也在我单击组合框时下拉的列表中!有办法解决这个问题吗?我希望按钮上有一个名称,当我按下按钮时,我希望项目是下拉的,而不是按钮的名称?如果能做到这一点,我会很感激的!WPF有一个很好的特性。它被称为“数据绑定”。从WPF开始应该对你有帮助
    ComboBoxItem item = new ComboBoxItem();
    item.Content = "A";
    comboBox1.Items.Add(item);
    
    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();