C# 将XML文件反序列化到ObservableCollection并添加对象
我用这个方法的一个按钮来反序列化一个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
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;
}
}