Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf INotifyPropertyChanged PropertyChangedEventHandler事件始终为空_Wpf_Inotifypropertychanged - Fatal编程技术网

Wpf INotifyPropertyChanged PropertyChangedEventHandler事件始终为空

Wpf INotifyPropertyChanged PropertyChangedEventHandler事件始终为空,wpf,inotifypropertychanged,Wpf,Inotifypropertychanged,我正在尝试使用WPF,但在更新时遇到了一个小问题,主要是在XML文件中正确更新新数据的同时显示旧数据。我已实施InotifyProperty更改如下:- public class Products : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; private string _prodId; public string ProdID {

我正在尝试使用WPF,但在更新时遇到了一个小问题,主要是在XML文件中正确更新新数据的同时显示旧数据。我已实施InotifyProperty更改如下:-

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,它也不会改变我的答案中的任何内容,因为您在循环中创建的项与列表中的项无关!