C# WPF-级联组合框不工作 XAML DataContext.cs 公共列表GetServer(字符串服务器) { var keys=ConfigurationManager.AppSettings.keys; returnkeys.Cast() .Where(key=>key.ToString().ToLower()) .Contains(server.ToLower()) .Select(key=>ConfigurationManager.AppSettings.Get(key.ToString()).ToList(); }

C# WPF-级联组合框不工作 XAML DataContext.cs 公共列表GetServer(字符串服务器) { var keys=ConfigurationManager.AppSettings.keys; returnkeys.Cast() .Where(key=>key.ToString().ToLower()) .Contains(server.ToLower()) .Select(key=>ConfigurationManager.AppSettings.Get(key.ToString()).ToList(); },c#,wpf,combobox,cascading,C#,Wpf,Combobox,Cascading,函数根据在第一个组合框中选择的服务器名称填充第二个组合框 public List GetDBNames(字符串sqlServerName) { List lstDBName=新列表(); sqlServerName=openconn().DataSource; SqlConnectionStringBuilder连接=新的SqlConnectionStringBuilder(); connection.DataSource=sqlServerName; connectio

函数根据在第一个组合框中选择的服务器名称填充第二个组合框

public List GetDBNames(字符串sqlServerName)
{            
List lstDBName=新列表();
sqlServerName=openconn().DataSource;
SqlConnectionStringBuilder连接=新的SqlConnectionStringBuilder();
connection.DataSource=sqlServerName;
connection.IntegratedSecurity=true;
String strCon=connection.ToString();
SqlConnection sqlConn=新的SqlConnection(strCon);
sqlConn.Open();
SqlCommand cmd=newsqlcommand(“从sys.databases中选择*”,sqlConn);
SqlDataReader dr=cmd.ExecuteReader();
while(dr.Read())
{
lstDBName.Add(dr[0].ToString());
}
sqlConn.Close();
返回lstDBName;
}
BackupViewModel.cs
List\u服务器名称列表;
列表_DBNameList;
公共列表服务器名称列表
{
获取{return\u ServerNameList;}
设置
{
_ServerNameList=值;
}
}
公共列表DBNameList
{
获取{return\u DBNameList;}
设置
{
_DBNameList=值;
}
}
选择字符串_serverSelected;
已选择公共字符串服务器
{
获取{return\u serverSelected;}
设置
{
如果(_serverSelected!=值)
_serverSelected=值;
RaisePropertyChanged(“服务器选定”);
}
}
公共备份视图模型()
{    
BackUpContext servObj=新的BackUpContext();
_ServerNameList=servObj.GetServer(“ServerName”);

_DBNameList=servObj.GetDBNames(serverSelected); serverCommand=newrelaycommand(fetchServer); } 公共RelayCommand服务器命令{get;set;} 公共服务器(对象服务器) { serverSelected=server.ToString(); } serverCommand=newrelaycommand(fetchServer);
我无法填充根据在第一个组合框中选择的值过滤的第二个组合框。我是否正确绑定了两个组合框


您已经将第二个组合框绑定到名为DBNameList的属性

您还没有为此写任何RaiseProperty更改

你的财产是这样的

List<string> _ServerNameList;
        List<string> _DBNameList;               

        public List<string> ServerNameList
        {
            get { return _ServerNameList; }
            set
            {
                _ServerNameList = value;                
            }
        }

        public List<string> DBNameList
        {
            get { return _DBNameList; }
            set
            {
                _DBNameList = value;
            }
        }

        string _serverSelected;
        public string serverSelected
        {
            get { return _serverSelected; }
            set
            {
                if ( _serverSelected!=value)                    
                    _serverSelected = value;

                RaisePropertyChanged("serverSelected");              
            }
        }

        public BackUpViewModel()
        {    
             BackUpContext servObj = new BackUpContext();
            _ServerNameList = servObj.GetServer("ServerName");
            _DBNameList = servObj.GetDBNames(serverSelected);                
            serverCommand = new RelayCommand(fetchServer);
}
public RelayCommand serverCommand { get; set; }
 public void fetchServer(object server)
        {
             serverSelected = server.ToString();               
        }

serverCommand = new RelayCommand(fetchServer);
公共列表DBNameList
{
获取{return\u DBNameList;}
设置
{
if(_DBNameList!=值)
{
_DBNameList=值;
RaisePropertyChanged(“数据库名称列表”);
}
}
}

运行时发生了什么?你期望发生什么?@Xiao:如果我在第一个组合框中选择任何值,第二个组合框中始终填充相同的数据库名称值。我希望根据第一个组合框中的选择,过滤第二个组合框,然后填充;此语句导致我出错,因为我的系统中只有一台服务器。因此,当我选择任何其他需要该数据库列表的服务器时,第二个组合框变为空。错误:在GetDBname()中:{“值不能为空。\r\n参数名称:数据源”}在GetDBname函数中放置一个断点,并查看此函数中的空值。我希望服务器选定的值应传递给H GetDBname()。然后将新数据源设置到所选服务器,构建新连接字符串并检索该服务器中的数据库。目前,连接字符串中提到的数据源总是作为参数传递给getDBNames()。所以每次提取相同的数据库时。
public List<string> GetServer(string server)
{
     var keys = ConfigurationManager.AppSettings.Keys;
     return keys.Cast<object>()
                .Where(key => key.ToString().ToLower()
                .Contains(server.ToLower()))
                .Select(key => ConfigurationManager.AppSettings.Get(key.ToString())).ToList();
 }
public List<string> GetDBNames(string sqlServerName)
{            
     List<string> lstDBName = new List<string>();        

     sqlServerName = openconn().DataSource;                         
     SqlConnectionStringBuilder connection = new SqlConnectionStringBuilder();
     connection.DataSource = sqlServerName;

     connection.IntegratedSecurity = true;
     String strCon = connection.ToString();
     SqlConnection sqlConn = new SqlConnection(strCon);
     sqlConn.Open();

     SqlCommand cmd = new SqlCommand("select * from sys.databases", sqlConn);
     SqlDataReader dr = cmd.ExecuteReader();
     while (dr.Read())
     {
         lstDBName.Add(dr[0].ToString());
     }
     sqlConn.Close();
     return lstDBName;               
}
List<string> _ServerNameList;
        List<string> _DBNameList;               

        public List<string> ServerNameList
        {
            get { return _ServerNameList; }
            set
            {
                _ServerNameList = value;                
            }
        }

        public List<string> DBNameList
        {
            get { return _DBNameList; }
            set
            {
                _DBNameList = value;
            }
        }

        string _serverSelected;
        public string serverSelected
        {
            get { return _serverSelected; }
            set
            {
                if ( _serverSelected!=value)                    
                    _serverSelected = value;

                RaisePropertyChanged("serverSelected");              
            }
        }

        public BackUpViewModel()
        {    
             BackUpContext servObj = new BackUpContext();
            _ServerNameList = servObj.GetServer("ServerName");
            _DBNameList = servObj.GetDBNames(serverSelected);                
            serverCommand = new RelayCommand(fetchServer);
}
public RelayCommand serverCommand { get; set; }
 public void fetchServer(object server)
        {
             serverSelected = server.ToString();               
        }

serverCommand = new RelayCommand(fetchServer);
public List<string> DBNameList
        {
            get { return _DBNameList; }
            set
            {
                if(_DBNameList != value)
                {
                    _DBNameList = value;
                    RaisePropertyChanged("DBNameList");
                }
            }
        }