我开发了一个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>
答案 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"/>