Wpf ligne de grille de données pas de mise à jour lorsqu'bindings de collecte mis à jour?
J'ai produit de classe nomméProduits.cs
class Products : INotifyPropertyChanged
{
private int productId = 0;
private int quantity = 0;
private string description = string.Empty;
private decimal price = 0.0m;
public event PropertyChangedEventHandler PropertyChanged;
public Products()
{
}
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
#region Properties
public int ProductID
{
get { return this.productId; }
set
{
if (value != productId)
{
this.productId = value;
OnPropertyChanged("ProductID");
}
}
}
public int Quantity
{
get { return this.quantity; }
set
{
if (value != this.quantity)
{
this.quantity = value;
OnPropertyChanged("Quantity");
OnPropertyChanged("SubTotal");
}
}
}
public String Description
{
get { return this.description;}
set
{
if (value != this.description)
{
this.description = value;
OnPropertyChanged("Description");
}
}
}
public Decimal Price
{
get { return this.price; }
set
{
if (value != this.price)
{
this.price = value;
OnPropertyChanged("Price");
}
}
}
public Decimal SubTotal
{
get { return Quantity * Price; }
}
public static List<Products> ProductList
{
get { return new List<Products>(); }
}
#endregion
}
Puis j'ai BilClass.cs à mettre en œuvre d'ajouter, de modifier & supprimer les éléments de la Liste.
class BillClass
{
public List<Products> ProductsList = new List<Products>();
Products products;
public BillClass()
{
AddProducts(1, 2, 20.00m, "a");
}
public void AddProducts(int _pid, int _quantity, decimal _price, string _desc)
{
products = new Products();
products.ProductID = _pid;
products.Quantity = _quantity;
products.Price = _price;
products.Description = _desc;
ProductsList.Add(products);
}
public bool RemoveProduct(int _id)
{
ProductsList.Remove(ProductsList.Find(e => e.ProductID.Equals(_id)));
return true;
}
public void EditProducts(int _pid, int _quantity)
{
Products ob = ProductsList.Find(e => e.ProductID.Equals(_pid));
ob.Quantity = _quantity;
}
public List<Products> GetItems()
{
return ProductsList;
}
J'ai appliqué cette "ProductList" à wpf datagrid. Ce datagrid affiche l'élément est déjà dans la collection (l'ajout de données dans BillClass constructeur), mais ne présentant pas de nouvel élément ajouté via les ventes de la fenêtre qui contient la grille de données.
DataGrid Code XAML
<Custom:DataGrid ItemsSource="{Binding Path=ProductsList}" Margin="16,100,16,120" AutoGenerateColumns="False" x:Name="dataGrid" HorizontalGridLinesBrush="#FFD0D0D0"
VerticalGridLinesBrush="#FFD0D0D0" CanUserDeleteRows="True" CanUserResizeRows="False" Background="White" IsTabStop="False" Focusable="False" IsReadOnly="True" CanUserSortColumns="False" CanUserResizeColumns="False" CanUserReorderColumns="False" GridLinesVisibility="Horizontal" EnableRowVirtualization="False">
<Custom:DataGrid.Columns>
<Custom:DataGridTextColumn Binding="{Binding Path=ProductID}" Header="Sl" Width="40" IsReadOnly="True" CanUserSort="False" CanUserResize="False" CanUserReorder="False" />
<Custom:DataGridTextColumn Binding="{Binding Path=ProductID}" Header="Product Code" Width="100" IsReadOnly="True" CanUserSort="False" CanUserResize="False" CanUserReorder="False" />
<Custom:DataGridTextColumn Binding="{Binding Path=Description}" Header="Description" Width="250" IsReadOnly="True" CanUserSort="False" CanUserResize="False" CanUserReorder="False" />
<Custom:DataGridTextColumn Binding="{Binding Path=Price}" Header="Unit Price (in Rs.)" Width="120" IsReadOnly="True" CanUserSort="False" CanUserResize="False" CanUserReorder="False" />
<Custom:DataGridTextColumn Binding="{Binding Path=Quantity}" Header="Quantity" Width="120" IsReadOnly="True" CanUserSort="False" CanUserResize="False" CanUserReorder="False" />
<Custom:DataGridTextColumn Binding="{Binding Path=SubTotal, Mode=OneWay}" Header="Total (in Rs.)" Width="120" IsReadOnly="True" CanUserSort="False" CanUserResize="False" CanUserReorder="False" />
</Custom:DataGrid.Columns>
</Custom:DataGrid>
Du code aidera
grâce
Qu'entendez-vous par "mais ne présentant pas de nouvel élément ajouté via les ventes de la fenêtre qui contient la grille de données". Êtes-vous le remplissage de la liste des produits de la grille à partir une autre fenêtre? si oui, Comment vous le faire?
OriginalL'auteur Rajkishor Sahu | 2010-05-31
Vous devez vous connecter pour publier un commentaire.
Votre Produit de la classe doit implémenter l'interface INotifyPropertyChanged et vous devez mettre à jour votre bind-mesure des propriétés pour déclencher cet événement tous les temps ont changé. C'est le moyen de liaison fonctionne en WPF.
Quelque chose comme cet extrait
Voici XAML:
Et cette ligne dans la Fenêtre du constructeur
Alors que votre code est vrai non pris en charge par WPF système de Liaison aussi, vous avez un problème que votre application ne correspond pas à votre idée de qui vous l'indiquer comme lors de la mise à jour de la Quantité de l'élément doit être mis à jour. J'ai mis à Jour le code et inclus XAML et le code derrière pour refléter cela, essayez-le maintenant...
M. Abdullah, il ne fonctionne pas pour moi, donc j'ai édité mon post et de fournir tout le code de travail sur cette liaison. espère obtenir une réponse positive. J'ai essayé votre code que vous avez mentionné dans votre code, mais sans succès, après que j'ai essayé de manipuler les choses. donc ne soyez pas en colère. Ce que je suis venu pour savoir que je suis en mesure d'ajouter des éléments à une Liste<>, mais pas en mesure de déclencher l'événement de mise à jour de grille de données. merci pour l'aide
"Ce que je suis venu pour savoir que je suis en mesure d'ajouter des éléments à une Liste<>, mais pas en mesure de déclencher l'événement de mise à jour de grille de données". Si oui, alors seulement les informer de l'INTERFACE utilisateur de ce qui se reflète par le tir événement PropertyChanged chaque fois que vous ajoutez un élément qui vous obligera à mettre en œuvre interface INotifyPropertyChanged où vous définissez ProdcutList propriété
événement public PropertyChangedEventHandler PropertyChanged; private void OnPropertyChange(string propertyName) { if (PropertyChanged != null) { PropertyChanged(ce, nouveau PropertyChangedEventArgs(propertyName)); Console.WriteLine("not NULL"); } Console.WriteLine("NULL"); } c'est retourner null chaque fois que je presse le bouton de sauvegarde
OriginalL'auteur Abdullah BaMusa
Il n'a rien à voir avec la Liste ou ObservableCollection. Toute la collection ne doit en informer le collection a été modifié (par exemple. ajouter un nouvel élément, supprimer un élément, etc). C'est l'élément individuel lui-même qui doit en informer l'INTERFACE utilisateur que certains champs ont été modifiés. Vous pouvez soit utiliser la propriété de dépendance ou d'implémenter INotifyPropertyChanged à utiliser WPF système de la propriété.
OriginalL'auteur Kai Wang