簡體   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