Свяжите динамическую c колонку данных с видимой коллекцией внутри источника - PullRequest
0 голосов
/ 30 января 2020

Я работаю над WPF, используя шаблон MVVM.

У меня есть требование создать сетку данных с динамическими c столбцами. Первый столбец имеет тип datagridtextcolumn и должен содержать имена менеджера (этот столбец - stati c), но из второго столбца он имеет тип datagridcheckboxcolumn, и многие сотрудники могут сопоставляться с одним менеджером.

У меня есть три класса

  1. MainViewmodel
  2. ManagerViewmodel
  3. EmployeeViewmodel

Мой класс выглядит так

            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.

...