繁体   English   中英

如何绑定 ienumerable 列表项

[英]How do I bind an ienumerable list item

我正在尝试使用点表示法将 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 enumerable 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...

<DataGrid x:Name="dgServers" Grid.Column="3" HorizontalAlignment="Left" Margin="22,24,0,0" Grid.Row="1" VerticalAlignment="Top" Height="237" Width="397" RenderTransformOrigin="0.5,0.5"
                   ItemsSource="{Binding dbPropsList}" AutoGenerateColumns="False">
            <DataGrid.Columns>
                <DataGridTextColumn Header="DBname" Binding="{Binding DBName}" />

                <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 enumerable 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

放弃 DataGridComboBoxColumn。

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

似乎我需要 TEXT 和 DisplayMemberPath 属性来实现这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM