C# 将项目添加到WPF中的组合框
当我将组合框添加到WPF窗口时,如何将项目添加到组合框?为设计或在NameOfWindow.XAML.cs文件中输入XAML代码?使用此选项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技术的信息,它允许您根据需要以多种方式完成许多事情。更重要的
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-您没有数据源: 您只需使用静态值填充
组合框
,如下所示-
private void Window\u已加载(对象发送方,路由目标)
{
comboBox1.Items.Add(“Alice”);
comboBox1.Items.Add(“Bob”);
comboBox1.Items.Add(“Charlie”);
}
//在填充的组合框的指定索引处插入项
已加载私有无效窗口(对象发送器、路由目标)
{
组合框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);
}
注意:这是使用反射。
如果您想了解更多关于反射的基础知识以及使用反射的原因,这是一篇很好的介绍性文章:
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();