为Datagrid的每一行添加组合框

时间:2020-03-19 09:59:49

标签: c# wpf mvvm

我有一个数据网格,其中列出了我的代理商列表。 我显示了我的代理,并向该数据网格添加了两个组合框,一个“矩阵”组合框(一个矩阵=数周内的日程表),以及一个组合框,显示了所选矩阵的星期几。

我的问题是,如果我更改组合框(例如矩阵),则所有组合框都将同时更改,如下所示:

enter image description here

如何才能“取消”组合框,使它们彼此独立,以便我可以针对每个代理或每一行在其组合框中选择不同的矩阵?

像特工A =矩阵A 代理B =矩阵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);
                }
            }
        }
    }

我的目标是从末尾的每一行中检索数据。

0 个答案:

没有答案