C# 如何使用mvvm从wpf中具有多个选择的数据库加载combobox下拉列表
我试图用数据库中的数据填充combobox下拉列表。 这应该在加载窗口时动态加载 查看模型C# 如何使用mvvm从wpf中具有多个选择的数据库加载combobox下拉列表,c#,mysql,wpf,mvvm,combobox,C#,Mysql,Wpf,Mvvm,Combobox,我试图用数据库中的数据填充combobox下拉列表。 这应该在加载窗口时动态加载 查看模型 public class StdBasicVM { private ObservableCollection<string> _sStreamCmb; public ObservableCollection<string> sStreamCmb { get { return _sStreamCmb; }
public class StdBasicVM
{
private ObservableCollection<string> _sStreamCmb;
public ObservableCollection<string> sStreamCmb
{
get { return _sStreamCmb; }
set { if (_sStreamCmb != value) { _sStreamCmb = value; OnPropertyChanged("sStreamCmb"); } }
}
private void COMBOBOX()
{
var connectionString = ConfigurationManager.ConnectionStrings["connscmag"].ConnectionString;
using (var conn = new MySqlConnection(connectionString))
{
conn.Open();
var query = "Select distinct entry FROM gidentifiers WHERE IDENTIFIER = 'STREAM' AND entry <> 'NULL' ";
using (var comm = new MySqlCommand(query, conn))
{
using (var reader = comm.ExecuteReader())
{
while (reader.Read())
{
if (reader.HasRows)
{
sStreamCmb.Add(reader.GetString("entry").ToString());
}
}
}
}
}
}
public StdBasicVM()
{
COMBOBOX();
}
}
公共类StdBasicVM
{
私有可观测收集(sStreamCmb);
公共可观测收集SStreamMB
{
获取{return\u sstreamcb;}
设置{if({sstreamcb!=value){{sstreamcb=value;OnPropertyChanged(“sstreamcb”);}
}
私有void组合框()
{
var connectionString=ConfigurationManager.ConnectionStrings[“connscmag”]。connectionString;
使用(var conn=new MySqlConnection(connectionString))
{
conn.Open();
var query=“从gidentifiers中选择不同的条目,其中标识符='STREAM'和条目'NULL';
使用(var comm=new MySqlCommand(query,conn))
{
使用(var reader=comm.ExecuteReader())
{
while(reader.Read())
{
if(reader.HasRows)
{
sstreamcb.Add(reader.GetString(“entry”).ToString();
}
}
}
}
}
}
公共StdBasicVM()
{
组合框();
}
}
窗口
<ComboBox x:Name="txtStream" Grid.Row="9" Grid.Column="1"
Text="{Binding sStream, Mode=TwoWay}"
DisplayMemberPath="Name"
ItemsSource="{Binding sStreamCmb}"/>
它会在线生成一个错误
sstreamcb.Add(reader.GetString(“entry”).ToString())
对象引用未设置为对象的实例。在代码中,您没有初始化组合框可观察集合。更改此行:
private ObservableCollection<string> _sStreamCmb;
private observeCollection\u sstreamcb;
为此:
private ObservableCollection<string> _sStreamCmb= new ObservableCollection<string>();
private ObservableCollection\u sstreamcb=new ObservableCollection();
它应该解决这个问题。您可以通过在csproj文件中添加此行来突出显示发生这种情况的时间:
<WarningsAsErrors>CS0649</WarningsAsErrors>
CS0649
这将把上述情况视为错误,省得您在运行时查找。这是否回答了您的问题?我想你错过了创建sstreamcb。顺便说一句:在大多数情况下,ObservableCollection的setter是无用的,不是您想要的。但是下拉列表是空的。那么您可能会有绑定问题,您需要发布完整的XAML和代码,以查看是否有错误。XAML中有一个错误,但已更正。谢谢你的回复!问题解决了。