Wpf INotifyPropertyChanged PropertyChangedEventHandler事件始终为空
我正在尝试使用WPF,但在更新时遇到了一个小问题,主要是在XML文件中正确更新新数据的同时显示旧数据。我已实施InotifyProperty更改如下:-Wpf INotifyPropertyChanged PropertyChangedEventHandler事件始终为空,wpf,inotifypropertychanged,Wpf,Inotifypropertychanged,我正在尝试使用WPF,但在更新时遇到了一个小问题,主要是在XML文件中正确更新新数据的同时显示旧数据。我已实施InotifyProperty更改如下:- public class Products : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; private string _prodId; public string ProdID {
public class Products : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private string _prodId;
public string ProdID
{
get { return _prodId; }
set
{
_prodId = value;
OnPropertyChanged("ProdID");
}
}
private string _prodName;
public string ProdName
{
get { return _prodName; }
set
{
_prodName = value;
OnPropertyChanged("ProdName");
}
}
private string _prodPrice;
public string ProdPrice
{
get { return _prodPrice; }
set
{
_prodPrice = value;
OnPropertyChanged("ProdPrice");
}
}
protected virtual void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
foreach (XmlNode node in nodeList)
{
if (nodeList[i].ChildNodes[0].InnerText == strID)
{
Products products = new Products();
products.ProdName = strName;
products.ProdPrice = strPrice;
nodeList[i].ChildNodes[1].InnerText = strName;
nodeList[i].ChildNodes[2].InnerText = strPrice;
break;
}
i++;
}
然后更新如下:-
public class Products : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private string _prodId;
public string ProdID
{
get { return _prodId; }
set
{
_prodId = value;
OnPropertyChanged("ProdID");
}
}
private string _prodName;
public string ProdName
{
get { return _prodName; }
set
{
_prodName = value;
OnPropertyChanged("ProdName");
}
}
private string _prodPrice;
public string ProdPrice
{
get { return _prodPrice; }
set
{
_prodPrice = value;
OnPropertyChanged("ProdPrice");
}
}
protected virtual void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
foreach (XmlNode node in nodeList)
{
if (nodeList[i].ChildNodes[0].InnerText == strID)
{
Products products = new Products();
products.ProdName = strName;
products.ProdPrice = strPrice;
nodeList[i].ChildNodes[1].InnerText = strName;
nodeList[i].ChildNodes[2].InnerText = strPrice;
break;
}
i++;
}
使用新的ProdName和Price正确保存XML,但是在更新后显示listView时,仍然得到错误的值
我是这样绑定产品的:-
public static List<Products> LoadProduct()
{
string fileName = "Products.xml";
List<Products> ListProdRecords = new List<Products>();
// Execute the query using the LINQ to XML
var prods = from p in XElement.Load(fileName).Elements("Product") select p;
foreach (var product in prods)
{
Products lProduct = new Products
{
ProdID = product.Element("ProductId").Value,
ProdName = product.Element("ProductName").Value,
ProdPrice = product.Element("Price").Value
};
ListProdRecords.Add(lProduct);
}
return ListProdRecords.ToList();
}
有什么问题吗
感谢您的帮助和时间我真的不明白,您循环中新创建的产品与
列表视图
有什么关系。您不会将它们添加到列表中,也不会以另一种方式将它们添加到列表视图中。
或者换句话说:在循环中创建这些实例是完全无用的,将被优化器删除。
您需要更新绑定到列表视图
的列表中的产品
类的实例您可以在将列表视图绑定到收藏的位置发布代码吗?确保您的集合是可观察的。当表示单个产品的类被称为Product时,collection也在调用OnPropertyChangedIt可能不会那么混乱。此外,Prod前缀是冗余的,我正在加载这样的产品:public static List LoadProduct(){string fileName=“products.xml”;List ListProdRecords=new List();//在XElement.Load(fileName.Elements)中使用LINQ to xml var prods=from p执行查询(“产品”)选择p;foreach(产品中的var product){Products LPPRODUCT=new Products{ProdID=product.Element(“ProductId”).Value,ProdName=product.Element(“ProductName”).Value,ProdPrice=product.Element(“Price”).Value};ListProdRecords.Add(LPProduct);}返回ListProdRecords.ToList();}@Johann:请用此信息更新您的问题。它作为注释是不可读的。@Johann:此外,这并没有显示如何将该列表绑定到listView,即使您将该列表正确绑定到listView,它也不会改变我的答案中的任何内容,因为您在循环中创建的项与列表中的项无关!