Je travaille sur le projet.J'utilise DataGrid pour remplir la "Collection Observable" vide et il fonctionne comme prévu.Le problème principal est que je veux calculer "Prix total" de le "produit" quand j'entre dans la vue de grille de données. Comme le "Pricesrc" est lié à une zone de texte qui doit afficher "le prix total" .Maintenant comment j'accomplis cette tâche. Aide sera appréciée.Collection observable additionner la colonne comme ligne ajoutée WPF
C'est ma classe de produits.
public class product_data
{
private String _Name;
private String _Brand;
private String _Price;
public string Name
{
get { return _Name; }
set { _Name = value; }
}
public string Brand
{
get { return _Brand; }
set { _Brand = value; }
}
public string Price
{
get { return _Price; }
set
{
_Price = value;
}
}
}
Ceci est ma classe ViewModel.
public class ViewModel:INotifyPropertyChanged
{
public int Pricesrc
{
set;get;
}
public ObservableCollection<product_data> listsrc;
public ObservableCollection<product_data> product_data
{
get { return listsrc; }
set
{
listsrc = value;
}
}
public ViewModel()
{
listsrc = new ObservableCollection<Pages.Product.product_data>();
}
public event PropertyChangedEventHandler PropertyChanged;
public void onPropertyChanged(string prop)
{
PropertyChanged?.Invoke(this,new PropertyChangedEventArgs(prop));
}
}
Ceci est mon XAML:
<Grid Background="#C82C2C2C">
<StackPanel Orientation="Vertical" Background="LightGray" Margin="150,60,150,60">
<StackPanel.Effect>
<DropShadowEffect BlurRadius="44"/>
</StackPanel.Effect>
<StackPanel Background="#FF886AF0" Height="80">
<TextBlock Text="Bill" FontSize="25" FontWeight="SemiBold" HorizontalAlignment="Center" Margin="0,20,0,0" Foreground="#FFE6E6E6"></TextBlock>
</StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Margin="0,35,0,0">
<TextBox x:Name="txt_Total" ToolTip="Total" Text="{Binding Pricesrc}" Height="50" Background="White" Foreground="#FFB6B2B2" BorderBrush="{x:Null}" BorderThickness="3" HorizontalAlignment="Center" Width="630" FontWeight="DemiBold" FontSize="16" VerticalContentAlignment="Center" Style="{DynamicResource flat_ui_textbox}" GotFocus="textboxes_gotFocus" LostFocus="textboxes_lostFocus"/>
</StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" >
<TextBox x:Name="txt_advance" ToolTip="Advance" Text="Advance" Height="50" Background="White" Foreground="#FFB6B2B2" BorderBrush="{x:Null}" BorderThickness="3" HorizontalAlignment="Center" Width="315" FontWeight="DemiBold" FontSize="16" VerticalContentAlignment="Center" Style="{DynamicResource flat_ui_textbox}" GotFocus="textboxes_gotFocus" LostFocus="textboxes_lostFocus"/>
<TextBox x:Name="txt_pending" ToolTip="Pending" Text="Pending" Height="50" Background="White" Foreground="#FFB6B2B2" BorderBrush="{x:Null}" BorderThickness="3" HorizontalAlignment="Center" Width="315" FontWeight="DemiBold" FontSize="16" VerticalContentAlignment="Center" Style="{DynamicResource flat_ui_textbox}" GotFocus="textboxes_gotFocus" LostFocus="textboxes_lostFocus"/>
</StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" >
<TextBox x:Name="txt_date" ToolTip="Date" Text="Date" Height="50" Background="White" Foreground="#FFB6B2B2" BorderBrush="{x:Null}" BorderThickness="3" HorizontalAlignment="Center" Width="475" FontWeight="DemiBold" FontSize="16" VerticalContentAlignment="Center" Style="{DynamicResource flat_ui_textbox}" GotFocus="textboxes_gotFocus" LostFocus="textboxes_lostFocus"/>
<TextBlock Margin="48,0,0,0" Text="Is Paid" VerticalAlignment="Center" FontWeight="Bold" FontSize="18" Foreground="#FF818181"/>
<CheckBox Margin="16,0,0,0" Height="35" Width="35" BorderBrush="{x:Null}" Style="{DynamicResource flat_ui_checkboxes}"></CheckBox>
</StackPanel>
<GroupBox Header="Product" Margin="150,35,150,0" Foreground="#FF7E7E7E" FontSize="24" FontWeight="DemiBold">
<DataGrid x:Name="product_grid" ItemsSource="{Binding product_data,Mode=TwoWay}" HorizontalAlignment="Center" Margin="0,0,0,0" Height=" 350" Background="White" Width="973.5" AutoGenerateColumns="False" CanUserAddRows="True">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name,Mode=TwoWay}" ></DataGridTextColumn>
<DataGridTextColumn Header="Brand" Binding="{Binding Brand,Mode=TwoWay}"></DataGridTextColumn>
<DataGridTextColumn Header="Price" Binding="{Binding Price,Mode=TwoWay}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</GroupBox>
<Button Width="200" Height="55" Background="#FF2DCC70" Margin="0,0,0,0" Template="{DynamicResource flat_add_green_btn}" Command="{Binding Add_Customer_Command}" Click="Button_Click" />
</StackPanel>
</Grid>
Merci pour la réponse, Il résout le problème, mais une chose est laissée que "La dernière rangée de prix de la grille n'est pas ajouté .... une solution ?? ... et pouvez-vous expliquer ce que" Pricesrc = listsrc.Sum (prod => prod.Price) "vraiment faire ... Merci agai –
Aussi quand je clique sur la colonne vide l'événement est déclenché mais il n'est pas déclenché quand la ligne est ajoutée –
Oh, je n'ai pas vu que Price La propriété est une chaîne Vous devez la convertir en type numérique approprié (comme int ou double) lors de la sommation (ou changer complètement le type de propriété) Sum somme la valeur de la propriété donnée pour while IEnumerable (c'est-à-dire Liste, tableau etc.) . –
Shadowed