【问题标题】:WPF Binding a list to a ComboBoxColumn within a DataGridWPF 将列表绑定到 DataGrid 中的 ComboBoxColumn
【发布时间】:2021-03-18 08:34:39
【问题描述】:

我遇到了 WPF 中数据网格中的组合框的问题。基本上我有一个“船员”类和“用户”类,在船员类中有一个列表,其中包含该船员的所有成员。

理想情况下,我希望数据网格有 3 列“船员 ID”、“成员”和“状态”,成员列将是一个组合框,可以单击以显示所有船员。我可以绑定船员,以便 id 和 status 显示正常,但不能显示成员。

数据网格通过返回所有工作人员列表的方法绑定在构造函数中。

任何帮助将不胜感激。

        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>

【问题讨论】:

    标签: c# wpf xaml combobox datagrid


    【解决方案1】:

    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>
    

    【讨论】:

      猜你喜欢
      • 2014-08-23
      • 2023-03-07
      • 1970-01-01
      • 2012-08-17
      • 2011-07-21
      • 1970-01-01
      • 2010-12-16
      • 2018-10-26
      • 2018-12-28
      相关资源
      最近更新 更多