如何绑定可相关的列表项

问题描述 投票:0回答:2

我试图使用点表示法将DataGridComboBoxColumn绑定到列表元素。我的列表有数据,我可以在后面的代码中看到,但我的ComboBox是空白的。

我尝试了很多版本的绑定点表示法级别。

这是我的代码背后......

            List<DatabaseProperty> dbList = new List<DatabaseProperty>();
            foreach(Database db in srv1.Databases)
            {
                DatabaseProperty newDB = new DatabaseProperty();
                newDB.DBName = db.Name.ToString();

                // Get the DB's users
                //List<DBUser> dbUserList = new List<DBUser>();

                for (int i = 0; i < srv1.Logins.Count; i++)
                {
                    // DatabaseProperty class contains a DBUser enumberable list
                    DBUser newdbUser = new DBUser();
                    //newDB.DBUserList[i].UserName = srv1.Logins[i].Name;
                    newdbUser.UserName = srv1.Logins[i].Name;

                    newDB.DBUserList.Add(newdbUser);
                }


                dbList.Add(newDB);
            }

和WPF ......

                <DataGridComboBoxColumn Header="DB Users" ItemsSource="{Binding Path=DBUserList.DBUser.UserName }" >

                </DataGridComboBoxColumn>
            </DataGrid.Columns>
        </DataGrid>
c# wpf datagrid
2个回答
1
投票

首先创建一个能够绑定的公共属性:

public DatabaseProperty MyNewBindableDB {get;set;}

List<DatabaseProperty> dbList = new List<DatabaseProperty>();    
        foreach(Database db in srv1.Databases)
        {
            DatabaseProperty newDB = new DatabaseProperty();
            newDB.DBName = db.Name.ToString();

            // Get the DB's users
            //List<DBUser> dbUserList = new List<DBUser>();

            for (int i = 0; i < srv1.Logins.Count; i++)
            {
                // DatabaseProperty class contains a DBUser enumberable list
                DBUser newdbUser = new DBUser();
                //newDB.DBUserList[i].UserName = srv1.Logins[i].Name;
                newdbUser.UserName = srv1.Logins[i].Name;

                newDB.DBUserList.Add(newdbUser);
            }


            dbList.Add(newDB);
        }
       MyNewBindableDB = dbList.FirstOrDefault(); //gets one list from your 
        //list of <DatabaseProperty>. 

现在你的代码应该像:

 <DataGridComboBoxColumn 
    Header="DB Users"       
    ItemsSource="{Binding Path=MyNewBindableDB.DBUserList}"
    SelectedValuePath="UserName" 
    DisplayMemberPath="UserName">
  </DataGridComboBoxColumn>

您还可以创建“DBUserList”类型的属性并绑定到它。

更多信息:DataGridComboBoxColumn


0
投票

放弃DataGridComboBoxColumn。

            <ComboBox ItemsSource="{Binding DBUserList}" Text="{Binding UserName}" 
                     DisplayMemberPath="UserName" IsEditable="True"></ComboBox>
         </DataTemplate>

似乎我需要TEXT和DisplayMemberPath属性才能将其关闭。

© www.soinside.com 2019 - 2024. All rights reserved.