如何使用mvvm从wpf中的多选数据库加载组合框下拉列表



我正在尝试用数据库中的数据填充组合框下拉列表。这应该在加载窗口时动态加载

查看模型

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

窗口

<ComboBox x:Name="txtStream" Grid.Row="9" Grid.Column="1" 
Text="{Binding sStream, Mode=TwoWay}" 
DisplayMemberPath="Name" 
ItemsSource="{Binding sStreamCmb}"/>

它在线上生成错误sStreamCmb.Add(reader.GetString("entry").ToString())对象引用未设置为对象的实例。

在您的代码中,您没有初始化组合框可观察集合。更改此行:

private ObservableCollection<string> _sStreamCmb;

对此:

private ObservableCollection<string> _sStreamCmb= new ObservableCollection<string>();

它应该能解决这个问题。您可以通过在csproj文件中添加以下行来突出显示这种情况:

<WarningsAsErrors>CS0649</WarningsAsErrors>

这将把上面的情况视为错误,从而节省您在运行时发现的时间。

最新更新