簡體   English   中英

WPF 將列表綁定到 DataGrid 中的 ComboBoxColumn

[英]WPF Binding a list to a ComboBoxColumn within a DataGrid

我在 WPF 的數據網格中遇到組合框問題。基本上我有一個 class 的“船員”和 class 的“用戶”,在船員 class 中是一個包含該船員所有成員的列表。

理想情況下,我希望數據網格有 3 列“船員 ID”、“成員”和“狀態”,成員列將是一個組合框,可以單擊它來顯示船員的所有成員。 我能夠綁定工作人員,以便 id 和狀態顯示正常但不是成員。

數據網格通過返回所有船員列表的方法綁定在構造函數中。

任何幫助將不勝感激。

        public ManagerDashboard(Dashboard Dash)
        {
            InitializeComponent();        
            dgCrew.ItemsSource = ds.listallCrews();
        }


//CREW CLASS
    public class Crew
    {
        Random rnd = new Random();
        Datastore ds = new Datastore();       
        public List<OperationalUser> lstCrewMembers  { get; set; }
        public int Crewid { get { return GenId(); } }
        public bool bIsActive { get; set; }

        public Crew()
        {           
            bIsActive = true;
        }

        private int GenId()
        {
            int id = rnd.Next(0, 1000);

            foreach (User u in ds.ListAllUsers())
                if (id == u.Userid)
                    id = rnd.Next(0, 1000);

          
            return id;
        }
    }

//XMAL
<DataGrid.Columns>
                <DataGridTextColumn Header="Crew ID"                                    
                                    Binding="{Binding Crewid}" />
                <DataGridComboBoxColumn Header="Members"
                                        ItemsSource="{Binding Path=DataContext.Crew, RelativeSource={RelativeSource AncestorType={x:Type Window}}}"
                                        DisplayMemberPath="Name"
                                        SelectedItemBinding="{Binding lstCrewMembers, Mode=TwoWay}"
                                        SelectedValueBinding="{Binding lstCrewMembers.Userid}"
                                        SelectedValuePath="Userid"
                                        />
              
                <DataGridCheckBoxColumn Header="Active"                                        
                                    Binding="{Binding bIsActive}" />
            </DataGrid.Columns>
        </DataGrid>

DataGridComboBoxColumn 用於從類型列表中進行選擇,這對所有行都是通用的。 您可能可以從成員列表中創建一個 ComboBoxItems 列表。 但我建議您使用 RowDetails 來顯示您的成員,如下所示:

    <DataGrid.RowDetailsTemplate>
        <DataTemplate>
            <DataGrid ItemsSource="{Binding lstCrewMembers}" IsReadOnly="True" AutoGenerateColumns="False">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="UserId" Binding="{Binding Userid}"></DataGridTextColumn>
                    <DataGridTextColumn Header="Name" Binding="{Binding Name}"></DataGridTextColumn>
                </DataGrid.Columns>
            </DataGrid>
        </DataTemplate>
    </DataGrid.RowDetailsTemplate>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM