DataGrid 中更改的值未显示在 WPF 中

Value changed in DataGrid not display in WPF

我开发了一个 WPF 应用程序。我有一个带有 ObservableCollection 绑定到我的 DataGrid 的 DataGrid。在这个 ObservableCollection 中,我有一个对象和一个整数。

当我将 Integer 更新到 ObservableCollection 时,它并没有变成我的 DataGrid。

我的代码:

C#

private class MateriauxQte : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        public t_materiaux materiaux { get; set; }

        private int _QuantiteChantier;
        public int QuantiteChantier { 
            get { return _QuantiteChantier; } 
            set 
            {
                if (value != _QuantiteChantier)
                {
                    _QuantiteChantier = value;

                    if (PropertyChanged != null) OnNotifyPropertyChanged("Quantite");
                }
            } }

        private void OnNotifyPropertyChanged(string p)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(p));
        }

        public ImageSource Img { get; set; }

        public MateriauxQte()
        {
            //Constructeur
            materiaux = new t_materiaux();
            QuantiteChantier = 0;
        }

        public MateriauxQte(t_materiaux m, int Qte = 0)
        {
            //Constructeur
            materiaux = m;
            if(materiaux.ID_IMAGE > -1)
            {
                c_image c_img = new CONTROLEUR.c_image();
                t_image i = c_img.GetImage((int)materiaux.ID_IMAGE);
                if (i.ID > 0 && i.IMAGE != null) Img = globale.DecodePhoto(i.IMAGE) as ImageSource;
            }
            QuantiteChantier = Qte;
        }

        public void Ajouter(int nbAjouter)
        {
            QuantiteChantier += nbAjouter;
        }

        public void Retirer(int nbRetirer)
        {
            QuantiteChantier -= nbRetirer;
        }
    }

private void AjouteUn(object sender, RoutedEventArgs e)
    {

        if (obsMateriaux[this.t_materiauxDispoDataGrid.SelectedIndex].QuantiteChantier == 0)
        {
            obsMateriaux[this.t_materiauxDispoDataGrid.SelectedIndex].Ajouter(1);
            obsMateriauxChantier.Add(obsMateriaux[this.t_materiauxDispoDataGrid.SelectedIndex]);
        }
        else { obsMateriaux[this.t_materiauxDispoDataGrid.SelectedIndex].Ajouter(1); }
        for (int o = 0; o < obsMateriauxChantier.Count; o++)
        {
            if (obsMateriauxChantier[o].materiaux.ID == obsMateriaux[this.t_materiauxDispoDataGrid.SelectedIndex].materiaux.ID)
            {
                obsMateriauxChantier[o] = obsMateriaux[this.t_materiauxDispoDataGrid.SelectedIndex];
                break;
            }
        }
        this.MajDataGrid(); //On met à jour le DataGrid
    }

    private void MajDataGrid()
    {
        this.t_materiauxDispoDataGrid.ItemsSource = obsMateriaux;
        this.t_materiauxChantierDataGrid.ItemsSource = obsMateriauxChantier;
        this.UpdateLayout();
    }

XAML :

<DataGrid Grid.Column="0" x:Name="t_materiauxDispoDataGrid" AutoGenerateColumns="False" EnableRowVirtualization="True" ItemsSource="{Binding obsMateriaux}" RowDetailsVisibilityMode="VisibleWhenSelected">
            <DataGrid.Columns>
                <DataGridTextColumn IsReadOnly="True" x:Name="cODE_MDColumn" Binding="{Binding materiaux.CODE_MD}" Header="CODE MD" Width="100"/>
                <DataGridTextColumn IsReadOnly="True" x:Name="lIBELLEColumn" Binding="{Binding materiaux.LIBELLE}" Header="LIBELLE" Width="150"/>
                <DataGridTemplateColumn x:Name="iMAGEColumn" Header="IMAGE" Width="150">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <Image Source="{Binding Img}" Height="100" Width="100" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
                <DataGridTemplateColumn x:Name="nBColumn" Header="QUANTITE" Width="150">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <Grid>
                                <Button Name="BTN_MOINS" Content="-" Width="30" HorizontalAlignment="Left" Click="RetireUn"/>
                                <TextBox Name="SAI_QTE" FontSize="26" Text="{Binding QuantiteChantier}" Margin="35" KeyUp="SAI_QTE_KeyUp" KeyDown="SAI_QTE_KeyDown"/>
                                <Button Name="BTN_PLUS" Content="+" Width="30" HorizontalAlignment="Right" Click="AjouteUn"/>
                            </Grid>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
            </DataGrid.Columns>
        </DataGrid>

将 "UpdateSourceTrigger=PropertyChanged" 添加到绑定。

像这样:

<TextBox Name="SAI_QTE" FontSize="26" Text="{Binding QuantiteChantier, UpdateSourceTrigger=PropertyChanged}" Margin="35" KeyUp="SAI_QTE_KeyUp" KeyDown="SAI_QTE_KeyDown"/>