提交记录修改UI/Controls/PageContainer.cs+80 −63看文件
修改UI/Models/IndexPageModel.cs+1 −1看文件
新增UI/Models/ModelBase.cs+13 −0看文件
修改UI/ViewModels/IndexPageVM.cs+13 −1看文件
修改UI/Views/DetailPage.xaml.cs+4 −1看文件
修改UI/Views/IndexPage.xaml.cs+4 −2看文件
修改UI/Views/SettingPage.xaml.cs+4 −1看文件
| @@ -7,6 +7,7 @@ using System.Threading.Tasks; | ||
| 7 | 7 | using System.Windows; |
| 8 | 8 | using System.Windows.Controls; |
| 9 | 9 | using System.Windows.Input; |
| 10 | 新增:using UI.Models; | |
| 10 | 11 | |
| 11 | 12 | namespace UI.Controls |
| 12 | 13 | { |
| @@ -116,7 +117,8 @@ namespace UI.Controls | ||
| 116 | 117 | private readonly string ProjectName; |
| 117 | 118 | private List<string> Historys; |
| 118 | 119 | public int Index = 0, OldIndex = 0; |
| 119 | 删除: private Dictionary<string, object> PageCache; | |
| 120 | 新增: private Dictionary<string, Page> PageCache; | |
| 121 | 新增: private bool IsBack = false; | |
| 120 | 122 | public PageContainer() |
| 121 | 123 | { |
| 122 | 124 | DefaultStyleKey = typeof(PageContainer); |
| @@ -125,13 +127,25 @@ namespace UI.Controls | ||
| 125 | 127 | BackCommand = new Command(new Action<object>(OnBackCommand)); |
| 126 | 128 | NavigationCommands.BrowseBack.InputGestures.Clear(); |
| 127 | 129 | NavigationCommands.BrowseForward.InputGestures.Clear(); |
| 128 | 删除: PageCache = new Dictionary<string, object>(); | |
| 130 | 新增: PageCache = new Dictionary<string, Page>(); | |
| 129 | 131 | } |
| 132 | 新增: | |
| 133 | 新增: | |
| 130 | 134 | public override void OnApplyTemplate() |
| 131 | 135 | { |
| 132 | 136 | base.OnApplyTemplate(); |
| 133 | 137 | |
| 134 | 138 | Loaded += PageContainer_Loaded; |
| 139 | 新增: Unloaded += PageContainer_Unloaded; | |
| 140 | 新增: } | |
| 141 | 新增: | |
| 142 | 新增: private void PageContainer_Unloaded(object sender, RoutedEventArgs e) | |
| 143 | 新增: { | |
| 144 | 新增: Loaded -= PageContainer_Loaded; | |
| 145 | 新增: Unloaded -= PageContainer_Unloaded; | |
| 146 | 新增: ClearCache(); | |
| 147 | 新增: Content = null; | |
| 148 | 新增: DataContext = null; | |
| 135 | 149 | } |
| 136 | 150 | |
| 137 | 151 | private void PageContainer_Loaded(object sender, RoutedEventArgs e) |
| @@ -153,26 +167,24 @@ namespace UI.Controls | ||
| 153 | 167 | string uri = Historys[Index]; |
| 154 | 168 | |
| 155 | 169 | int preIndex = Index + 1; |
| 156 | 删除: int count = Historys.Count - (Index + 1); | |
| 157 | 删除: // 从缓存中移除之前的页面 | |
| 158 | 删除: for (int i = preIndex; i < count; i++) | |
| 170 | 新增: | |
| 171 | 新增: // 从缓存中移除上一页 | |
| 172 | 新增: | |
| 173 | 新增: var pageUri = Historys[preIndex]; | |
| 174 | 新增: if (PageCache.ContainsKey(pageUri)) | |
| 159 | 175 | { |
| 160 | 删除: var pageUri = Historys[i]; | |
| 161 | 删除: if (PageCache.ContainsKey(pageUri)) | |
| 162 | 删除: { | |
| 163 | 删除: var page = PageCache[pageUri]; | |
| 164 | 删除: page = null; | |
| 165 | 删除: PageCache.Remove(pageUri); | |
| 166 | 删除: } | |
| 176 | 新增: var page = PageCache[pageUri]; | |
| 177 | 新增: var vm = page.DataContext as ModelBase; | |
| 178 | 新增: vm?.Dispose(); | |
| 179 | 新增: page = null; | |
| 180 | 新增: PageCache.Remove(pageUri); | |
| 167 | 181 | } |
| 182 | 新增: Historys.RemoveRange(preIndex, 1); | |
| 168 | 183 | |
| 169 | 删除: // 历史记录中移除 | |
| 170 | 删除: Historys.RemoveRange(preIndex, count); | |
| 184 | 新增: IsBack = true; | |
| 171 | 185 | |
| 172 | 186 | Uri = uri; |
| 173 | 187 | |
| 174 | 删除: | |
| 175 | 删除: | |
| 176 | 188 | } |
| 177 | 189 | } |
| 178 | 190 | |
| @@ -184,83 +196,88 @@ namespace UI.Controls | ||
| 184 | 196 | { |
| 185 | 197 | if (Uri != string.Empty) |
| 186 | 198 | { |
| 187 | 删除: Page page = null; | |
| 188 | 删除: var pageVM = GetPageVM(Uri); | |
| 189 | 删除: Type pageType = Type.GetType(ProjectName + ".Views." + Uri); | |
| 190 | 删除: if (pageType != null && ServiceProvider != null) | |
| 199 | 新增: if (IndexUriList != null && IndexUriList.Contains(Uri)) | |
| 191 | 200 | { |
| 192 | 删除: page = ServiceProvider.GetService(pageType) as Page; | |
| 193 | 删除: if (page != null) | |
| 201 | 新增: Historys.Clear(); | |
| 202 | 新增: Index = 0; | |
| 203 | 新增: OldIndex = 0; | |
| 204 | 新增: Historys.Add(Uri); | |
| 205 | 新增: if (!IsBack) | |
| 194 | 206 | { |
| 195 | 删除: | |
| 196 | 删除: page.DataContext = pageVM; | |
| 197 | 删除: | |
| 207 | 新增: ClearCache(); | |
| 198 | 208 | } |
| 199 | 209 | |
| 200 | 210 | } |
| 211 | 新增: else | |
| 212 | 新增: { | |
| 213 | 新增: //处理历史记录 | |
| 214 | 新增: if (OldIndex == Index) | |
| 215 | 新增: { | |
| 216 | 新增: //新开 | |
| 217 | 新增: Historys.Add(Uri); | |
| 218 | 新增: Index++; | |
| 219 | 新增: } | |
| 220 | 新增: OldIndex = Index; | |
| 221 | 新增: } | |
| 222 | 新增: Page page = GetPage(); | |
| 223 | 新增: | |
| 201 | 224 | |
| 202 | 225 | if (page != null) |
| 203 | 226 | { |
| 204 | 删除: | |
| 205 | 227 | Content = page; |
| 206 | 228 | |
| 207 | 删除: | |
| 208 | 删除: | |
| 209 | 删除: if (IndexUriList != null && IndexUriList.Contains(Uri)) | |
| 210 | 删除: { | |
| 211 | 删除: Historys.Clear(); | |
| 212 | 删除: Index = 0; | |
| 213 | 删除: OldIndex = 0; | |
| 214 | 删除: Historys.Add(Uri); | |
| 215 | 删除: PageCache.Clear(); | |
| 216 | 删除: } | |
| 217 | 删除: else | |
| 229 | 新增: // 加入缓存 | |
| 230 | 新增: if (!PageCache.ContainsKey(Uri)) | |
| 218 | 231 | { |
| 219 | 删除: //处理历史记录 | |
| 220 | 删除: if (OldIndex == Index) | |
| 221 | 删除: { | |
| 222 | 删除: //新开 | |
| 223 | 删除: Historys.Add(Uri); | |
| 224 | 删除: Index++; | |
| 225 | 删除: } | |
| 226 | 删除: OldIndex = Index; | |
| 232 | 新增: PageCache.Add(Uri, page); | |
| 227 | 233 | } |
| 228 | 234 | |
| 229 | 删除: // 加入缓存 | |
| 230 | 删除: PageCache.Add(Uri, pageVM); | |
| 231 | 删除: | |
| 232 | 235 | OnLoadPaged?.Invoke(this, EventArgs.Empty); |
| 233 | 236 | } |
| 234 | 237 | else |
| 235 | 238 | { |
| 236 | 239 | Debug.WriteLine("找不到Page:" + Uri + ",请确认已被注入"); |
| 237 | 240 | } |
| 238 | 删除: | |
| 239 | 删除: | |
| 240 | 241 | } |
| 242 | 新增: IsBack = false; | |
| 241 | 243 | } |
| 242 | 244 | |
| 243 | 删除: | |
| 244 | 删除: private object GetPageVM(string uri) | |
| 245 | 新增: private Page GetPage() | |
| 245 | 246 | { |
| 246 | 删除: if (PageCache.ContainsKey(uri)) | |
| 247 | 新增: Page page = null; | |
| 248 | 新增: if (PageCache.ContainsKey(Uri)) | |
| 247 | 249 | { |
| 248 | 删除: return PageCache[uri]; | |
| 250 | 新增: return PageCache[Uri]; | |
| 249 | 251 | } |
| 250 | 删除: else | |
| 252 | 新增: Type pageType = Type.GetType(ProjectName + ".Views." + Uri); | |
| 253 | 新增: if (pageType != null && ServiceProvider != null) | |
| 251 | 254 | { |
| 252 | 删除: Type pageVMType = Type.GetType(ProjectName + ".ViewModels." + Uri + "VM"); | |
| 253 | 删除: if (ServiceProvider != null && pageVMType != null) | |
| 255 | 新增: page = ServiceProvider.GetService(pageType) as Page; | |
| 256 | 新增: if (page != null) | |
| 254 | 257 | { |
| 255 | 删除: | |
| 256 | 删除: var pageVM = ServiceProvider.GetService(pageVMType); | |
| 257 | 删除: | |
| 258 | 删除: return pageVM; | |
| 258 | 新增: page.Unloaded += Page_Unloaded; | |
| 259 | 259 | } |
| 260 | 删除: else | |
| 260 | 新增: } | |
| 261 | 新增: return page; | |
| 262 | 新增: } | |
| 263 | 新增: private void Page_Unloaded(object sender, RoutedEventArgs e) | |
| 264 | 新增: { | |
| 265 | 新增: Page page = (Page)sender; | |
| 266 | 新增: | |
| 267 | 新增: page.Unloaded -= Page_Unloaded; | |
| 268 | 新增: } | |
| 269 | 新增: | |
| 270 | 新增: private void ClearCache() | |
| 271 | 新增: { | |
| 272 | 新增: if (PageCache != null) | |
| 273 | 新增: { | |
| 274 | 新增: foreach (var key in PageCache.Keys) | |
| 261 | 275 | { |
| 262 | 删除: return null; | |
| 276 | 新增: var page = PageCache[key]; | |
| 277 | 新增: var vm = page.DataContext as ModelBase; | |
| 278 | 新增: vm?.Dispose(); | |
| 263 | 279 | } |
| 280 | 新增: PageCache.Clear(); | |
| 264 | 281 | } |
| 265 | 282 | } |
| 266 | 283 | } |
| @@ -8,7 +8,7 @@ using UI.Controls.Charts.Model; | ||
| 8 | 8 | |
| 9 | 9 | namespace UI.Models |
| 10 | 10 | { |
| 11 | 删除: public class IndexPageModel : UINotifyPropertyChanged | |
| 11 | 新增: public class IndexPageModel : ModelBase | |
| 12 | 12 | { |
| 13 | 13 | private ObservableCollection<string> TabbarData_; |
| 14 | 14 | /// <summary> |
| @@ -0,0 +1,13 @@ | ||
| 1 | 新增:using System; | |
| 2 | 新增:using System.Collections.Generic; | |
| 3 | 新增:using System.Linq; | |
| 4 | 新增:using System.Text; | |
| 5 | 新增:using System.Threading.Tasks; | |
| 6 | 新增: | |
| 7 | 新增:namespace UI.Models | |
| 8 | 新增:{ | |
| 9 | 新增: public class ModelBase : UINotifyPropertyChanged | |
| 10 | 新增: { | |
| 11 | 新增: public virtual void Dispose() { } | |
| 12 | 新增: } | |
| 13 | 新增:} | |
| @@ -8,6 +8,7 @@ using System.Drawing; | ||
| 8 | 8 | using System.Linq; |
| 9 | 9 | using System.Text; |
| 10 | 10 | using System.Threading.Tasks; |
| 11 | 新增:using System.Windows; | |
| 11 | 12 | using System.Windows.Media.Imaging; |
| 12 | 13 | using UI.Controls; |
| 13 | 14 | using UI.Controls.Charts.Model; |
| @@ -23,6 +24,7 @@ namespace UI.ViewModels | ||
| 23 | 24 | private readonly IData data; |
| 24 | 25 | private readonly MainViewModel main; |
| 25 | 26 | private readonly IMain mainServicer; |
| 27 | 新增: | |
| 26 | 28 | public IndexPageVM( |
| 27 | 29 | IData data, MainViewModel main, IMain mainServicer) |
| 28 | 30 | { |
| @@ -32,10 +34,17 @@ namespace UI.ViewModels | ||
| 32 | 34 | |
| 33 | 35 | ToDetailCommand = new Command(new Action<object>(OnTodetailCommand)); |
| 34 | 36 | |
| 35 | 删除: mainServicer.OnUpdateTime += MainServicer_OnUpdateTime; | |
| 36 | 37 | Init(); |
| 37 | 38 | } |
| 38 | 39 | |
| 40 | 新增: | |
| 41 | 新增: public override void Dispose() | |
| 42 | 新增: { | |
| 43 | 新增: mainServicer.OnUpdateTime -= MainServicer_OnUpdateTime; | |
| 44 | 新增: PropertyChanged -= IndexPageVM_PropertyChanged; | |
| 45 | 新增: base.Dispose(); | |
| 46 | 新增: } | |
| 47 | 新增: | |
| 39 | 48 | private void MainServicer_OnUpdateTime(object sender, EventArgs e) |
| 40 | 49 | { |
| 41 | 50 | if (TabbarSelectedIndex == 1) |
| @@ -52,7 +61,10 @@ namespace UI.ViewModels | ||
| 52 | 61 | }; |
| 53 | 62 | |
| 54 | 63 | TabbarSelectedIndex = 1; |
| 64 | 新增: | |
| 55 | 65 | PropertyChanged += IndexPageVM_PropertyChanged; |
| 66 | 新增: mainServicer.OnUpdateTime += MainServicer_OnUpdateTime; | |
| 67 | 新增: | |
| 56 | 68 | LoadThisWeekData(); |
| 57 | 69 | } |
| 58 | 70 | |
| @@ -12,6 +12,7 @@ using System.Windows.Media; | ||
| 12 | 12 | using System.Windows.Media.Imaging; |
| 13 | 13 | using System.Windows.Navigation; |
| 14 | 14 | using System.Windows.Shapes; |
| 15 | 新增:using UI.ViewModels; | |
| 15 | 16 | |
| 16 | 17 | namespace UI.Views |
| 17 | 18 | { |
| @@ -20,9 +21,11 @@ namespace UI.Views | ||
| 20 | 21 | /// </summary> |
| 21 | 22 | public partial class DetailPage : Page |
| 22 | 23 | { |
| 23 | 删除: public DetailPage() | |
| 24 | 新增: public DetailPage(DetailPageVM vm) | |
| 24 | 25 | { |
| 25 | 26 | InitializeComponent(); |
| 27 | 新增: | |
| 28 | 新增: DataContext = vm; | |
| 26 | 29 | } |
| 27 | 30 | } |
| 28 | 31 | } |
| @@ -13,6 +13,7 @@ using System.Windows.Media.Imaging; | ||
| 13 | 13 | using System.Windows.Navigation; |
| 14 | 14 | using System.Windows.Shapes; |
| 15 | 15 | using UI.Controls.Charts.Model; |
| 16 | 新增:using UI.ViewModels; | |
| 16 | 17 | |
| 17 | 18 | namespace UI.Views |
| 18 | 19 | { |
| @@ -21,10 +22,11 @@ namespace UI.Views | ||
| 21 | 22 | /// </summary> |
| 22 | 23 | public partial class IndexPage : Page |
| 23 | 24 | { |
| 24 | 删除: public IndexPage() | |
| 25 | 新增: public IndexPage(IndexPageVM vm) | |
| 25 | 26 | { |
| 26 | 27 | InitializeComponent(); |
| 27 | 删除: | |
| 28 | 新增: | |
| 29 | 新增: DataContext = vm; | |
| 28 | 30 | } |
| 29 | 31 | } |
| 30 | 32 | } |
| @@ -12,6 +12,7 @@ using System.Windows.Media; | ||
| 12 | 12 | using System.Windows.Media.Imaging; |
| 13 | 13 | using System.Windows.Navigation; |
| 14 | 14 | using System.Windows.Shapes; |
| 15 | 新增:using UI.ViewModels; | |
| 15 | 16 | |
| 16 | 17 | namespace UI.Views |
| 17 | 18 | { |
| @@ -20,9 +21,11 @@ namespace UI.Views | ||
| 20 | 21 | /// </summary> |
| 21 | 22 | public partial class SettingPage : Page |
| 22 | 23 | { |
| 23 | 删除: public SettingPage() | |
| 24 | 新增: public SettingPage(SettingPageVM vm) | |
| 24 | 25 | { |
| 25 | 26 | InitializeComponent(); |
| 27 | 新增: | |
| 28 | 新增: DataContext = vm; | |
| 26 | 29 | } |
| 27 | 30 | } |
| 28 | 31 | } |

