我试图使用点表示法将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>
首先创建一个能够绑定的公共属性:
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。
<ComboBox ItemsSource="{Binding DBUserList}" Text="{Binding UserName}"
DisplayMemberPath="UserName" IsEditable="True"></ComboBox>
</DataTemplate>
似乎我需要TEXT和DisplayMemberPath属性才能将其关闭。