Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/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
C# 将XML文件反序列化到ObservableCollection并添加对象_C#_Xml_Deserialization_Win Universal App_Xml Deserialization - Fatal编程技术网

C# 将XML文件反序列化到ObservableCollection并添加对象

C# 将XML文件反序列化到ObservableCollection并添加对象,c#,xml,deserialization,win-universal-app,xml-deserialization,C#,Xml,Deserialization,Win Universal App,Xml Deserialization,我用这个方法的一个按钮来反序列化一个ObservableCollection,但是在我不能再向我的列表中添加一个对象之后 private async void RecoveryList_Click(object sender, RoutedEventArgs e) { StorageFile file = await ApplicationData.Current.LocalFolder.GetFileAsync("List.xml"); DataContractSerializer

我用这个方法的一个按钮来反序列化一个ObservableCollection,但是在我不能再向我的列表中添加一个对象之后

private async void RecoveryList_Click(object sender, RoutedEventArgs e)
    {
StorageFile file = await ApplicationData.Current.LocalFolder.GetFileAsync("List.xml"); 
DataContractSerializer serializer = new DataContractSerializer(typeof(ObservableCollection<ProductClass>));

using (Stream stream = await file.OpenStreamForReadAsync())
{
   ObservableCollection<ProductClass> Products = serializer.ReadObject(stream) as ObservableCollection<ProductClass>;
   ListView1.ItemsSource = Products;
}
   }
我观察到的收集是

public ObservableCollection<ProductClass> Products;

如何将一些“产品”添加到我的列表中?

您的类中有一个名为
Products
的公共
observeCollection
字段,但在您的
RecoveryList\u单击
方法,您可以使用一个新的
ObservableCollection
来检索反序列化的列表,并将其设置为ListView的
项资源
。虽然它们是相同的名称,但它们不是相同的对象。因此,无法将新项添加到ListView

要解决此问题,您可以在
RecoveryList\中删除新
Products
的声明,单击下面的方法,并确保在所有方法中操作相同的对象

private async void RecoveryList_Click(object sender, RoutedEventArgs e)
{
    StorageFile file = await ApplicationData.Current.LocalFolder.GetFileAsync("List.xml");
    DataContractSerializer serializer = new DataContractSerializer(typeof(ObservableCollection<ProductClass>));

    using (Stream stream = await file.OpenStreamForReadAsync())
    {
        Products = serializer.ReadObject(stream) as ObservableCollection<ProductClass>;
        ListView1.ItemsSource = Products;
    }
}
private async void RecoveryList\u单击(对象发送方,RoutedEventArgs e)
{
StorageFile file=wait ApplicationData.Current.LocalFolder.GetFileAsync(“List.xml”);
DataContractSerializer serializer=新的DataContractSerializer(typeof(ObservableCollection));
使用(Stream=await file.OpenStreamForReadAsync())
{
Products=serializer.ReadObject(流)作为ObservableCollection;
ListView1.ItemsSource=产品;
}
}

您遇到的例外情况是什么?当用户插入产品时,此产品将替换整个反序列化列表我有一个文本框,用户在其中插入产品,单击“添加”按钮后,产品将进入列表。因此,当用户关闭我想要的应用程序时,当他回来时,在点击“恢复列表”后,应用程序会给他旧的列表。现在用户可以添加产品,但是如果列表被反序列化,新产品将替换旧的反序列化列表。没有任何更改,当我添加产品时,没有显示任何内容,只有反序列化列表。非常感谢!让我一天都很愉快
public ObservableCollection<ProductClass> Products;
namespace AppSpesaPhone.Models
{
   public class ProductClass
   {
        public string Prodotti { get; set; }
   }       
}
private async void RecoveryList_Click(object sender, RoutedEventArgs e)
{
    StorageFile file = await ApplicationData.Current.LocalFolder.GetFileAsync("List.xml");
    DataContractSerializer serializer = new DataContractSerializer(typeof(ObservableCollection<ProductClass>));

    using (Stream stream = await file.OpenStreamForReadAsync())
    {
        Products = serializer.ReadObject(stream) as ObservableCollection<ProductClass>;
        ListView1.ItemsSource = Products;
    }
}