From 9f94dd55c2f22d6815eff28ab4759e8d27ff8cd6 Mon Sep 17 00:00:00 2001 From: Geoffroy Bonneville Date: Thu, 12 Oct 2017 18:37:49 +0200 Subject: [PATCH] Added ViewModel property in code behind of all pages Workaround a bug in Entry password reveal when set for the first time --- ModernKeePass/MainPage.xaml.cs | 5 ++-- ModernKeePass/Pages/EntryDetailPage.xaml | 28 ++++++++----------- ModernKeePass/Pages/EntryDetailPage.xaml.cs | 2 +- ModernKeePass/Pages/GroupDetailPage.xaml.cs | 15 ++++------ ModernKeePass/Pages/NewDatabasePage.xaml.cs | 5 ++-- ModernKeePass/Pages/OpenDatabasePage.xaml.cs | 5 ++-- .../Pages/RecentDatabasesPage.xaml.cs | 6 ++-- ModernKeePass/Pages/SaveDatabasePage.xaml.cs | 7 ++--- ModernKeePass/ViewModels/EntryVm.cs | 1 + .../ViewModels/Items/RecentItemVm.cs | 2 +- 10 files changed, 35 insertions(+), 41 deletions(-) diff --git a/ModernKeePass/MainPage.xaml.cs b/ModernKeePass/MainPage.xaml.cs index b8360b6..0692664 100644 --- a/ModernKeePass/MainPage.xaml.cs +++ b/ModernKeePass/MainPage.xaml.cs @@ -11,6 +11,8 @@ namespace ModernKeePass /// public sealed partial class MainPage { + public MainVm Model => (MainVm)DataContext; + public MainPage() { InitializeComponent(); @@ -24,8 +26,7 @@ namespace ModernKeePass private void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e) { - var mainVm = DataContext as MainVm; - mainVm?.SelectedItem?.Destination.Navigate(mainVm.SelectedItem.PageType, mainVm.SelectedItem.Parameter); + Model.SelectedItem?.Destination.Navigate(Model.SelectedItem.PageType, Model.SelectedItem.Parameter); } } } diff --git a/ModernKeePass/Pages/EntryDetailPage.xaml b/ModernKeePass/Pages/EntryDetailPage.xaml index 68befe8..a2a3a44 100644 --- a/ModernKeePass/Pages/EntryDetailPage.xaml +++ b/ModernKeePass/Pages/EntryDetailPage.xaml @@ -36,26 +36,20 @@ - - - - - - - - - - - + + + + + + + + + + - + diff --git a/ModernKeePass/Pages/EntryDetailPage.xaml.cs b/ModernKeePass/Pages/EntryDetailPage.xaml.cs index 54d2221..72c6d50 100644 --- a/ModernKeePass/Pages/EntryDetailPage.xaml.cs +++ b/ModernKeePass/Pages/EntryDetailPage.xaml.cs @@ -99,7 +99,7 @@ namespace ModernKeePass.Pages { try { - var uri = new Uri(urlTextBox.Text); + var uri = new Uri(UrlTextBox.Text); await Windows.System.Launcher.LaunchUriAsync(uri); } catch diff --git a/ModernKeePass/Pages/GroupDetailPage.xaml.cs b/ModernKeePass/Pages/GroupDetailPage.xaml.cs index be8edec..1d4893b 100644 --- a/ModernKeePass/Pages/GroupDetailPage.xaml.cs +++ b/ModernKeePass/Pages/GroupDetailPage.xaml.cs @@ -22,7 +22,8 @@ namespace ModernKeePass.Pages /// process lifetime management /// public NavigationHelper NavigationHelper { get; } - + public GroupVm Model => (GroupVm)DataContext; + public GroupDetailPage() { InitializeComponent(); @@ -94,8 +95,7 @@ namespace ModernKeePass.Pages case -1: return; case 0: - var currentGroup = DataContext as GroupVm; - currentGroup?.CreateNewEntry(); + Model.CreateNewEntry(); GridView.SelectedIndex = -1; // TODO: Navigate to new entry? return; @@ -111,8 +111,7 @@ namespace ModernKeePass.Pages // Add commands and set their callbacks; both buttons use the same callback function instead of inline event handlers messageDialog.Commands.Add(new UICommand("Delete", delete => { - var group = DataContext as GroupVm; - group?.RemoveGroup(); + Model.RemoveGroup(); if (Frame.CanGoBack) Frame.GoBack(); })); messageDialog.Commands.Add(new UICommand("Cancel")); @@ -137,9 +136,8 @@ namespace ModernKeePass.Pages private void SearchBox_OnSuggestionsRequested(SearchBox sender, SearchBoxSuggestionsRequestedEventArgs args) { - var viewModel = DataContext as GroupVm; var imageUri = RandomAccessStreamReference.CreateFromUri(new Uri("ms-appx://Assets/Logo.scale-80.png")); - var results = viewModel?.Entries.Skip(1).Where(e => e.Title.IndexOf(args.QueryText, StringComparison.OrdinalIgnoreCase) >= 0).Take(5); + var results = Model.Entries.Skip(1).Where(e => e.Title.IndexOf(args.QueryText, StringComparison.OrdinalIgnoreCase) >= 0).Take(5); foreach (var result in results) { args.Request.SearchSuggestionCollection.AppendResultSuggestion(result.Title, result.ParentGroup.Name, result.Id, imageUri, string.Empty); @@ -148,8 +146,7 @@ namespace ModernKeePass.Pages private void SearchBox_OnResultSuggestionChosen(SearchBox sender, SearchBoxResultSuggestionChosenEventArgs args) { - var viewModel = DataContext as GroupVm; - var entry = viewModel?.Entries.Skip(1).FirstOrDefault(e => e.Id == args.Tag); + var entry = Model.Entries.Skip(1).FirstOrDefault(e => e.Id == args.Tag); Frame.Navigate(typeof(EntryDetailPage), entry); } diff --git a/ModernKeePass/Pages/NewDatabasePage.xaml.cs b/ModernKeePass/Pages/NewDatabasePage.xaml.cs index ea0e750..c0dc6dd 100644 --- a/ModernKeePass/Pages/NewDatabasePage.xaml.cs +++ b/ModernKeePass/Pages/NewDatabasePage.xaml.cs @@ -18,6 +18,8 @@ namespace ModernKeePass.Pages { private Frame _mainFrame; + public OpenVm Model => (OpenVm)DataContext; + public NewDatabasePage() { InitializeComponent(); @@ -40,8 +42,7 @@ namespace ModernKeePass.Pages var file = await savePicker.PickSaveFileAsync(); if (file == null) return; - var viewModel = DataContext as OpenVm; - viewModel?.OpenFile(file); + Model.OpenFile(file); } private void PasswordUserControl_PasswordChecked(object sender, PasswordEventArgs e) diff --git a/ModernKeePass/Pages/OpenDatabasePage.xaml.cs b/ModernKeePass/Pages/OpenDatabasePage.xaml.cs index caa6b45..7f3fa85 100644 --- a/ModernKeePass/Pages/OpenDatabasePage.xaml.cs +++ b/ModernKeePass/Pages/OpenDatabasePage.xaml.cs @@ -17,6 +17,8 @@ namespace ModernKeePass.Pages { private Frame _mainFrame; + public OpenVm Model => (OpenVm)DataContext; + public OpenDatabasePage() { InitializeComponent(); @@ -38,9 +40,8 @@ namespace ModernKeePass.Pages }; picker.FileTypeFilter.Add(".kdbx"); - var viewModel = DataContext as OpenVm; // Application now has read/write access to the picked file - viewModel?.OpenFile(await picker.PickSingleFileAsync()); + Model.OpenFile(await picker.PickSingleFileAsync()); } private void PasswordUserControl_PasswordChecked(object sender, PasswordEventArgs e) diff --git a/ModernKeePass/Pages/RecentDatabasesPage.xaml.cs b/ModernKeePass/Pages/RecentDatabasesPage.xaml.cs index 84f39b9..c3c60dc 100644 --- a/ModernKeePass/Pages/RecentDatabasesPage.xaml.cs +++ b/ModernKeePass/Pages/RecentDatabasesPage.xaml.cs @@ -16,6 +16,8 @@ namespace ModernKeePass.Pages { private Frame _mainFrame; + public RecentVm Model => (RecentVm)DataContext; + public RecentDatabasesPage() { InitializeComponent(); @@ -34,10 +36,8 @@ namespace ModernKeePass.Pages private void OpenDatabaseUserControl_OnValidationChecking(object sender, EventArgs e) { - //throw new NotImplementedException(); - var viewModel = DataContext as RecentVm; var app = (App)Application.Current; - app.Database.DatabaseFile = viewModel?.SelectedItem.DatabaseFile; + app.Database.DatabaseFile = Model.SelectedItem.DatabaseFile; } } } diff --git a/ModernKeePass/Pages/SaveDatabasePage.xaml.cs b/ModernKeePass/Pages/SaveDatabasePage.xaml.cs index e93ae73..dccfb00 100644 --- a/ModernKeePass/Pages/SaveDatabasePage.xaml.cs +++ b/ModernKeePass/Pages/SaveDatabasePage.xaml.cs @@ -16,6 +16,7 @@ namespace ModernKeePass.Pages public sealed partial class SaveDatabasePage { private Frame _mainFrame; + public SaveVm Model => (SaveVm)DataContext; public SaveDatabasePage() { InitializeComponent(); @@ -29,8 +30,7 @@ namespace ModernKeePass.Pages private void SaveButton_OnClick(object sender, RoutedEventArgs e) { - var viewModel = DataContext as SaveVm; - viewModel?.Save(); + Model.Save(); _mainFrame.Navigate(typeof(MainPage)); } @@ -45,8 +45,7 @@ namespace ModernKeePass.Pages var file = await savePicker.PickSaveFileAsync(); if (file == null) return; - var viewModel = DataContext as SaveVm; - viewModel?.Save(file); + Model.Save(file); _mainFrame.Navigate(typeof(MainPage)); } diff --git a/ModernKeePass/ViewModels/EntryVm.cs b/ModernKeePass/ViewModels/EntryVm.cs index 973c983..cb9a28f 100644 --- a/ModernKeePass/ViewModels/EntryVm.cs +++ b/ModernKeePass/ViewModels/EntryVm.cs @@ -14,6 +14,7 @@ namespace ModernKeePass.ViewModels public System.Drawing.Color? BackgroundColor => Entry?.BackgroundColor; public System.Drawing.Color? ForegroundColor => Entry?.ForegroundColor; + public bool IsRevealPasswordEnabled => !string.IsNullOrEmpty(Password); public string Title { diff --git a/ModernKeePass/ViewModels/Items/RecentItemVm.cs b/ModernKeePass/ViewModels/Items/RecentItemVm.cs index 412e04e..8091283 100644 --- a/ModernKeePass/ViewModels/Items/RecentItemVm.cs +++ b/ModernKeePass/ViewModels/Items/RecentItemVm.cs @@ -18,7 +18,7 @@ namespace ModernKeePass.ViewModels public StorageFile DatabaseFile { get; private set; } public string Token { get; private set; } - public string Name { get; private set; } + public string Name { get; private set; } = "Recent file"; public string Path => DatabaseFile.Path; public bool IsSelected