当用户点击列表中的特定项目时,新页面打开并在那里他可以看到特定项目的完整详细信息。如果他认为他不想要,他可以删除特定项目。我的问题是文件没有从列表中删除。
public partial class DetailsPage : PhoneApplicationPage
{
SavedData prkdata = new SavedData();
SavedDataList parkinglistobj = new SavedDataList();
IsolatedStorageFile Settings = IsolatedStorageFile.GetUserStoreForApplication();
int index;
public DetailsPage()
{
InitializeComponent();
//this.Loaded += MainPage_Loaded;
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
string selectedIndex = "";
if (NavigationContext.QueryString.TryGetValue("selectedItem", out selectedIndex))
{
index = int.Parse(selectedIndex);
try
{
parkinglistobj.Clear();
if (Settings.FileExists("CardItemList"))
{
using (IsolatedStorageFileStream fileStream = Settings.OpenFile("CardItemList", FileMode.Open))
{
DataContractSerializer serializer = new DataContractSerializer(typeof(SavedDataList));
parkinglistobj = (SavedDataList)serializer.ReadObject(fileStream);
}
}
ParkListBox.ItemsSource = parkinglistobj.Where(i => i.ID == index).ToList();
//String itemselected = parkinglistobj.Where(i => i.ID == index).Select(i.CardName).ToString();
//MessageBox.Show(itemselected);
}
catch
{
//
}
}
}
private void DeleteFile(object sender, EventArgs e)
{
//ParkListBox.SelectedItem = parkinglistobj.Select(i => i.ID == index);
//SavedData item = ParkListBox.DataContext as SavedData;
SavedData item = parkinglistobj.Select(i => i.ID == index) as SavedData;
//SavedData item = ParkListBox.SelectedItem as SavedData;
parkinglistobj.Remove(item);
MessageBox.Show("Deleted Successfully");
}
}
答案 0 :(得分:0)
在DeleteFile事件处理程序中,您应该删除该项,然后将其重新序列化回CardItemList文件
答案 1 :(得分:0)
您需要与您的视图(即ListBox
)进行通信,确认某些内容已发生变化,因此需要更新/重新绘制其内容。
不幸的是,通用List<T>
不会自动为您执行此操作。您需要的是使用ObservableCollection<T>
代替。
MSDN: ObservableCollection Class,请注意这部分描述:
表示动态数据集合,在添加,删除项目或刷新整个列表时提供通知。
如果您正确使用它,对集合的任何添加和删除都将导致ListBox
自行重绘。