首页 > 解决方案 > 将动态 datagridcolumn 绑定到 itemssource 中的 obsevablecollection

问题描述

我正在使用 MVVM 模式处理 WPF。

我需要创建一个带有动态列的数据网格。第一列是 datagridtextcolumn 类型,应该包含经理姓名(此列是静态的),但从第二列开始,它是 datagridcheckboxcolumn 类型,许多员工可以映射到单个经理。

我有三个班

  1. 主视图模型
  2. 经理视图模型
  3. 员工视图模型

我的课是这样的

            class mainViewmodel()

            {
            // to hold the managers

            public observablecollection<ManagerViewmodel> Managers{get; set;}
            }

            class ManagerViewmodel()

            {

            //To hold the manager Names

             Public string ManagerName{get; set;}

            //To hold the list of employees

            public observablecollection<employeeViewmodel> Employees{get;set;}

            }

            class employeeViewmodel()

            {
            // to hold a boolean value whether employee to reporting to manager

            public bool IsReprting {get;set;}

            }

            in my main.XAML

              <DataGrid x:Name="MyDataGrid" CanUserAddRows="False" CanUserDeleteRows="False" CanUserSortColumns="False" AutoGenerateColumns="False" IsEnabled="True" SelectionMode="Extended" SelectionUnit="Cell">            
                        <DataGrid.Resources>
                            <Style BasedOn="{StaticResource {x:Type DataGridColumnHeader}}" TargetType="{x:Type DataGridColumnHeader}">
                                <Setter Property="Background" Value="#FFDEEAF6"/>
                                <Setter Property="BorderBrush" Value="Black"/>
                                <Setter Property="BorderThickness" Value="0 0 1 1"/>
                                <Setter Property="Height" Value="auto"/>
                                <Setter Property="FontWeight" Value="Bold"/>
                            </Style>
                        </DataGrid.Resources>
                        <DataGrid.Columns>                
                            <DataGridTemplateColumn header = "Manager">

                                <DataGridTemplateColumn.CellTemplate>
                                    <DataTemplate>
                                        <TextBlock Text="{Binding ManagerName,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
                                    </DataTemplate>
                                </DataGridTemplateColumn.CellTemplate>
                            </DataGridTemplateColumn>              
                        </DataGrid.Columns>
                    </DataGrid>

            in my main.CS

            public main()

            {
            Initializecomponent();

            MainViewmodel Main = MainViewmodel();
            this.datacontext = Main;
            //adding datagridcheckboxcolumns dynamically
         for (int i = 0; i < Managers.employees.count; i++)
                    {
                        DataGridCheckBoxColumn checkBoxColumn = new DataGridCheckBoxColumn();
                        checkBoxColumn.Header = Main.Managers[i].ManagerName;
                        checkBoxColumn.IsReadOnly = false;

                        DG.Columns.Add(checkBoxColumn);
                    }
                    ListCollectionView listCollection = new ListCollectionView(Main.Managers);
                    this.MyDataGrid.ItemsSource = listCollection;  
            }

这里经理名称绑定在我的 xaml 代码中,现在我想将每个员工的 IsReporting 属性绑定到 datagridcheckboxcolumn 的每一行。

标签: c#wpfmvvmdata-bindingdatagrid

解决方案


推荐阅读