Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.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# 如何使用mvvm从wpf中具有多个选择的数据库加载combobox下拉列表_C#_Mysql_Wpf_Mvvm_Combobox - Fatal编程技术网

C# 如何使用mvvm从wpf中具有多个选择的数据库加载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; }

我试图用数据库中的数据填充combobox下拉列表。 这应该在加载窗口时动态加载

查看模型

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中有一个错误,但已更正。谢谢你的回复!问题解决了。