private async void LocationsPanel_DragItemsCompleted(ListViewBase sender, DragItemsCompletedEventArgs args) { if (!(args.Items.First() is LocationPanelViewModel panel)) { return; } var data = await Settings.GetFavorites(); int newIndex = LocationPanels.IndexOf(panel); int oldIndex = data.FindIndex(location => location.query == panel.LocationData.query); if (oldIndex != newIndex) { MoveData(panel, oldIndex, newIndex); } // Make sure we're still in EditMode after if (!EditMode) { ToggleEditMode(); } if (oldIndex != newIndex) { DataChanged = true; } if (newIndex == App.HomeIdx) { HomeChanged = true; } }
private void ToggleEditMode() { // Toggle EditMode EditMode = !EditMode; EditButton.Icon = new SymbolIcon(EditMode ? Symbol.Accept : Symbol.Edit); EditButton.Label = EditMode ? App.ResLoader.GetString("Label_Done") : App.ResLoader.GetString("Label_Edit"); LocationsPanel.IsItemClickEnabled = !EditMode; foreach (LocationPanelViewModel view in LocationPanels) { view.EditMode = EditMode; if (!EditMode && DataChanged) { string query = view.LocationData.query; int pos = LocationPanels.IndexOf(view); Task.Run(() => Settings.MoveLocation(query, pos)); } } if (!EditMode && HomeChanged) { Task.Run(WeatherUpdateBackgroundTask.RequestAppTrigger); } DataChanged = false; HomeChanged = false; }
private void MoveData(LocationPanelViewModel view, int fromIdx, int toIdx) { // Only move panels if we haven't already if (LocationPanels.IndexOf(view) != toIdx) { LocationPanels.Move(fromIdx, toIdx); } }