C# 获取组合框所选项目 公共部分类主窗口:窗口 { 公共主窗口() { 初始化组件(); loadUserCB(); } 私有void loadUserCB() { SqlDbConnect sdc=新的SqlDbConnect(); 数据集ds=新数据集(); SqlQuery(“select*fromtuser”); ds=sdc.QueryEx(“TUserDS”); UserCB.DataContext=ds; 字符串selUserName=UserCB.SelectedItem.ToString();//此代码无法获取所选项目 } } }
在MainWindow.xaml中,我创建了一个组合框,然后在MainWindow.xaml.cs中,我将组合框与Sqlserver中的一个表绑定。C# 获取组合框所选项目 公共部分类主窗口:窗口 { 公共主窗口() { 初始化组件(); loadUserCB(); } 私有void loadUserCB() { SqlDbConnect sdc=新的SqlDbConnect(); 数据集ds=新数据集(); SqlQuery(“select*fromtuser”); ds=sdc.QueryEx(“TUserDS”); UserCB.DataContext=ds; 字符串selUserName=UserCB.SelectedItem.ToString();//此代码无法获取所选项目 } } },c#,wpf,C#,Wpf,在MainWindow.xaml中,我创建了一个组合框,然后在MainWindow.xaml.cs中,我将组合框与Sqlserver中的一个表绑定。 如何从UserCB combobox获取所选项目?我认为您应该尝试使用MVVM框架 由于绑定基于notify而不是active,因此在非MVVM框架的情况下,如果直接修改DataContext。All has bound属性不知道DataContext已更新,因此它们的值不会更改 通过MVVM框架,使用实现INotifyPropertyChange
如何从UserCB combobox获取所选项目?我认为您应该尝试使用MVVM框架 由于绑定基于notify而不是active,因此在非MVVM框架的情况下,如果直接修改DataContext。All has bound属性不知道DataContext已更新,因此它们的值不会更改 通过MVVM框架,使用实现INotifyPropertyChanged接口的ViewModel将在属性更改时通知所有相关的绑定属性,从而避免数据上下文更新的问题 简单的例子:
<ComboBox ItemsSource="{Binding Path=TUserDS}" x:Name="UserCB"
SelectionChanged="UserCB_SelectionChanged" Width="200"
HorizontalAlignment="left" SelectedIndex="0" Padding="2" Margin="0 10 0 0">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Path=UserName}"/>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
loadUserCB();
}
private void loadUserCB()
{
SqlDbConnect sdc = new SqlDbConnect();
DataSet ds = new DataSet();
sdc.SqlQuery("select * from TUser");
ds=sdc.QueryEx("TUserDS");
UserCB.DataContext = ds;
string selUserName = UserCB.SelectedItem.ToString(); //this code failed to get the selected item
}
}
}
*:DataSet不支持索引器,但“DataSet.Tables”支持索引器
由于ComboBox.ItemsSource收到VM.Ds属性更改通知,因此它将尝试更新自己的数据如果您想坚持当前的设计,请尝试将Xaml更改为
<!--Xaml Code-->
<!-- V Note here.*-->
<ComboBox ItemsSource="{Binding Tables[TUserDS]}"
x:Name="UserCB"
SelectionChanged="UserCB_SelectionChanged"
Width="200"
HorizontalAlignment="left"
SelectedIndex="0"
Padding="2"
Margin="0 10 0 0">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding UserName}"/>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
更多信息在这种情况下,您有名称组合框->
UserCB
在类主窗口中
:
- 使用参考
UserCB。在任何方法中选择editem
- 要获取项目索引,请使用参考
。对于小列表,您可以通过这种方式下载索引,并在此基础上从项目集合或数据库中读取值UserCB.SelectedIndex
(当您使用此内容调用函数时,您将获得当前值)您是否尝试过
string selUserName=UserCB.SelectedValue代码>?如果文本和值相同,那么您也可以执行string selUserName=UserCB.text代码>是的,但SelectedValue也返回null。但是,我可以设置UserCB.SelectedIndex=3或任何数字来选择我想要的用户。但我不知道如何获取所选项目的字符串。您使用的设计模式已过时。您可以了解MVVM。您可能想了解一下,我尝试在“UserCB.DataContext=ds”之后设置SelectedIndex,但即使在这之后,SelectedItem仍然返回Null。我在阅读您的答案后了解了MVVM,并一直方便地使用它。谢谢你的建议。
<!--Xaml Code-->
<!-- V Note here.*-->
<ComboBox ItemsSource="{Binding Tables[TUserDS]}"
x:Name="UserCB"
SelectionChanged="UserCB_SelectionChanged"
Width="200"
HorizontalAlignment="left"
SelectedIndex="0"
Padding="2"
Margin="0 10 0 0">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding UserName}"/>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<ComboBox ItemsSource="{Binding Path=TUserDS}" x:Name="UserCB" SelectionChanged="UserCB_SelectionChanged" Width="200"
HorizontalAlignment="left" SelectedIndex="0" Padding="2" Margin="0 10 0 0"
DisplayMemberPath="UserName"/>