Добавить комбинированный список для каждой строки Datagrid - PullRequest
1 голос
/ 19 марта 2020

У меня есть таблица данных со списком моих агентов. Я отображаю свои агенты и добавляю два комбинированных списка в эту сетку данных: комбинированный список "matrice" (matrice = расписание на несколько недель) и комбинированный список, отображающий дни недели для выбранной matrice.

Моя проблема заключается в том, что если я изменяю комбинированный список, например матрицу, все комбинированные списки изменяются одновременно следующим образом:

enter image description here

Как можно Я "раскручиваю ie" комбо-боксы, чтобы они не зависели друг от друга, чтобы я мог для каждого агента или каждой строки выбрать различную матрицу в своем комбо-боксе?

Как агент A = Матрица A, агент B = Matrice Z ...

Вот мой код:

       <!--Section datagrid-->
    <DataGrid x:Name="DGagents" Grid.Row="1" Grid.Column="3" Grid.RowSpan="3" Margin="5" AlternationCount="2" ItemContainerStyle="{StaticResource alternatingStyle}" ItemsSource="{Binding Agents}" IsReadOnly="True" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTemplateColumn>
                <DataGridTemplateColumn.Header>
                    <CheckBox IsChecked="{Binding Path=DataContext.SelectAllAgents, 
                RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}" PresentationTraceSources.TraceLevel="High"></CheckBox>
                </DataGridTemplateColumn.Header>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <CheckBox VerticalAlignment="Center" HorizontalAlignment="Center" IsChecked="{Binding Path=IsSelected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>

            <DataGridTextColumn Header="Matricule" Width="100" HeaderStyle="{StaticResource CenterGridHeaderStyle}" Binding="{Binding Matricule}" />
            <DataGridTextColumn Header="Nom" Width="120" HeaderStyle="{StaticResource CenterGridHeaderStyle}" Binding="{Binding Nom}"/>
            <DataGridTextColumn Header="Prénom" Width="120" HeaderStyle="{StaticResource CenterGridHeaderStyle}" Binding="{Binding Prenom}"/>
            <DataGridTemplateColumn Header="Matrice" Width="150" HeaderStyle="{StaticResource CenterGridHeaderStyle}">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <ComboBox ItemsSource="{Binding Path=DataContext.MatricesEtablissement, 
                RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}" SelectedItem="{Binding Path=DataContext.selectedMatrice, 
                RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}">
                            <ComboBox.ItemTemplate>
                                <DataTemplate>
                                    <Grid>
                                        <Grid.ColumnDefinitions>
                                            <ColumnDefinition SharedSizeGroup="A"/>
                                            <ColumnDefinition SharedSizeGroup="B"/>
                                        </Grid.ColumnDefinitions>
                                        <TextBlock Grid.Column="0" 
                                         Text="{Binding IDMatrice}"
                                         Margin="4,0,0,0"/>
                                        <TextBlock Grid.Column="1" 
                                         Text="{Binding Nom}"
                                         Margin="4,0,0,0"/>
                                    </Grid>
                                </DataTemplate>
                            </ComboBox.ItemTemplate>
                        </ComboBox>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTemplateColumn Header="Semaine" Width="60" HeaderStyle="{StaticResource CenterGridHeaderStyle}">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <ComboBox ItemsSource="{Binding Path=DataContext.MatriceWeeks, 
                RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}" SelectedItem="{Binding Path=DataContext.selectedWeeks, 
                RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}">
                            <ComboBox.ItemTemplate>
                                <DataTemplate>
                                    <TextBlock 
                                         Text="{Binding Num_jour_sem}"
                                         Margin="4,0,0,0"/>
                                </DataTemplate>
                            </ComboBox.ItemTemplate>
                        </ComboBox>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTemplateColumn Header="Date début" Width="150" HeaderStyle="{StaticResource CenterGridHeaderStyle}">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <DatePicker SelectedDate="{Binding DateDebut}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTemplateColumn Header="Date fin" Width="150" HeaderStyle="{StaticResource CenterGridHeaderStyle}">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <DatePicker SelectedDate="{Binding DateFin}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>            
        </DataGrid.Columns>
    </DataGrid>

И C#

    private ObservableCollection<Matrix> _MatricesEtablissement;
    public ObservableCollection<Matrix> MatricesEtablissement
    {
        get
        {
            return _MatricesEtablissement;
        }
        set
        {
            if (value != _MatricesEtablissement)
            {
                _MatricesEtablissement = value;
                RaisePropertyChanged("MatricesEtablissement");
            }
        }
    }

    private Matrix _selectedMatrice;
    public Matrix selectedMatrice
    {
        get
        {
            return _selectedMatrice;
        }
        set
        {
            if (value != _selectedMatrice)
            {
                _selectedMatrice = value;
                UpdateMatriceWeek(value);
                RaisePropertyChanged("selectedMatrice");
            }
        }
    }

    private ObservableCollection<Matrix> _MatriceWeeks;
    public ObservableCollection<Matrix> MatriceWeeks
    {
        get
        {
            return _MatriceWeeks;
        }
        set
        {
            if (value != _MatriceWeeks)
            {
                _MatriceWeeks = value;
                RaisePropertyChanged("MatriceWeeks");
            }
        }
    }

    private Matrix _selectedWeeks;
    public Matrix selectedWeeks
    {
        get
        {
            return _selectedWeeks;
        }
        set
        {
            if (value != _selectedWeeks)
            {
                _selectedWeeks = value;
                RaisePropertyChanged("selectedWeeks");
            }
        }
    }

    private void UpdateListeMatrice()
    {
        MatricesEtablissement = new ObservableCollection<Matrix>();

        foreach(Matrix m in Matrices)
        {
            if (MatricesEtablissement.Any(p => p.IDMatrice == m.IDMatrice) == false)
                MatricesEtablissement.Add(m);
        }

    }

    private void UpdateMatriceWeek(Matrix selectedValue)
    {
        MatriceWeeks = new ObservableCollection<Matrix>();

        if(selectedValue != null)
        {
            foreach (Matrix m in Matrices)
            {
                if (m.IDMatrice == selectedMatrice.IDMatrice)
                {
                    MatriceWeeks.Add(m);
                }
            }
        }
    }

Моя цель - получить данные из каждой строки в конце.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...