DataGrid中的值更改不会显示在WPF中

时间:2015-03-12 16:49:38

标签: wpf binding datagrid

我开发了一个WPF应用程序。我有一个DataGrid与ObservableCollection绑定到我的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>

1 个答案:

答案 0 :(得分:0)

添加&#34; UpdateSourceTrigger = PropertyChanged&#34;绑定。

这样的事情:

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