Aktualizacja kolekcji w pliku

0

Chciałem się dowiedzieć jak po usunięciu rekordu z Listy, mogę zaktualizować plik z kolekcja

ViewModel

 private void ProfileModel_DeleteItemEvent(ProfileModel profileModel)
        {
            ProfileItems.Remove(profileModel);

            if (!ProfileItems.Any())
            {
                ShowLoginForm = true;
                ShowProfileItems = false;
            }
            //Tu chce dodac aktualizację pliku
        } 

Menager

  private void SaveProfile()   
        {
            if (ProfileItems == null) ProfileItems = new List<ProfileModel>();

            if(!ProfileItems.Contains(CurrentUser)) ProfileItems.Add(CurrentUser);

            var list = Newtonsoft.Json.JsonConvert.SerializeObject(ProfileItems);
            FileManagerInstance.WriteTextToFile(FileManager.FileType.ProfileList, list);
        }

        public async Task<bool> SetProfileList()
        {
            var content = await FileManagerInstance.ReadFile(FileManager.FileType.ProfileList);

            if(string.IsNullOrEmpty(content))
            {
                ProfileItems = new List<ProfileModel>();

                return false;
            }

            try 
            {
                ProfileItems = Newtonsoft.Json.JsonConvert.DeserializeObject<List<ProfileModel>>(content);
            } 
            catch(Newtonsoft.Json.JsonException ex)
            {
                _log.MessageInDebug("Result content is bad!");

                if (Debugger.IsAttached) 
                {
                    throw ex;
                }
            }

            return ProfileItems != null && ProfileItems.Any();
        } 
0

Najprościej będzie istniejący plik zastąpić nowym.

0

@smokin no właśnie chlałbym tak zrobić ale nie wiem za bardzo jak się do tego zabrać.

1

jeden ze sposobow

  1. zczytujesz istniejacy plik caly
  2. Dodajesz do niego to co potrzebujesz
  3. usuwasz poprzedni jezeli mozesz
  4. zapisujesz nowy jezeli 3 sie udalo
0

@fasadin Dziękuje za odpowiedz. Plik szczytuje mi się po odpaleniu aplikacji

Menager

      private void SaveProfile()
        {
            if (ProfileItems == null) ProfileItems = new List<ProfileModel>();

            if (!ProfileItems.Contains(CurrentUser)) ProfileItems.Add(CurrentUser);

            var list = Newtonsoft.Json.JsonConvert.SerializeObject(ProfileItems);
            FileManagerInstance.WriteTextToFile(FileManager.FileType.ProfileList, list);
        }

        public void RerfreshProfile(List<ProfileModel> profileItems)
        {
            var list = Newtonsoft.Json.JsonConvert.SerializeObject(profileItems);
            FileManagerInstance.WriteTextToFile(FileManager.FileType.ProfileList, list);
        }

public async Task<bool> SetProfileList()
        {
            var content = await FileManagerInstance.ReadFile(FileManager.FileType.ProfileList);

            if (string.IsNullOrEmpty(content))
            {
                ProfileItems = new List<ProfileModel>();

                return false;
            }

            try
            {
                ProfileItems = Newtonsoft.Json.JsonConvert.DeserializeObject<List<ProfileModel>>(content);
            }
            catch (Newtonsoft.Json.JsonException ex)
            {
                _log.MessageInDebug("Result content is bad!");

                if (Debugger.IsAttached)
                {
                    throw ex;
                }
            }

            return ProfileItems != null && ProfileItems.Any();
        } 

ViewModel

        private async void InitializeProfile()
        {
            ShowLoginForm = true;
            ShowProfileItems = false;

            bool result = await ProfileManagerInstance.PreviousLoggedCurrentUser();

            if (result)
            {
                Device.BeginInvokeOnMainThread(() =>
                {
                    SingletonsManager.Instance.ProtoBufManagerInstance.InitializeSocketConnection(ProfileManagerInstance.CurrentUser.Login,
                                                                                                  ProfileManagerInstance.CurrentUser.Password);
                });

                return;

            }

            result = await ProfileManagerInstance.SetProfileList();

            if (!result) return;

            ProfileItems = new ObservableCollection<ProfileModel>(ProfileManagerInstance.ProfileItems);

            foreach (var profileModel in ProfileItems)
            {
                profileModel.DeleteItemEvent += ProfileModel_DeleteItemEvent;
            }


            ShowLoginForm = false;
            ShowProfileItems = true;
        }

Mam problem z jak wykorzystać to co mam zeby zrbić resztę punktów

1 użytkowników online, w tym zalogowanych: 0, gości: 1