From 45b5ae56302822a3024d00ac2e8a54cfcb38c550 Mon Sep 17 00:00:00 2001 From: Geoffroy BONNEVILLE Date: Wed, 20 May 2020 17:40:06 +0200 Subject: [PATCH] ColorPickerControl finally doesn't set database to dirty when there is an initial value --- .../UserControls/ColorPickerUserControl.xaml | 12 ++-- .../ColorPickerUserControl.xaml.cs | 35 +++++------- .../UserControls/ColorPickerControlVm.cs | 56 +++++++++++++++++++ .../ViewModels/ViewModelLocatorCommon.cs | 2 + WinAppCommon/WinAppCommon.projitems | 1 + 5 files changed, 81 insertions(+), 25 deletions(-) create mode 100644 WinAppCommon/ViewModels/UserControls/ColorPickerControlVm.cs diff --git a/ModernKeePass/Views/UserControls/ColorPickerUserControl.xaml b/ModernKeePass/Views/UserControls/ColorPickerUserControl.xaml index a7fcbcb..fcb62ca 100644 --- a/ModernKeePass/Views/UserControls/ColorPickerUserControl.xaml +++ b/ModernKeePass/Views/UserControls/ColorPickerUserControl.xaml @@ -6,10 +6,14 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> + DataContext="{Binding Source={StaticResource Locator}, Path=ColorPicker}" + ItemsSource="{Binding Colors}" + SelectedItem="{Binding SelectedItem}" + SelectedValue="{Binding SelectedColor, ElementName=UserControl}" + SelectedValuePath="ColorBrush" + Loaded="ComboBox_OnLoaded" + SelectionChanged="ComboBox_OnSelectionChanged" + IsEnabled="{Binding IsEnabled, ElementName=UserControl}"> diff --git a/ModernKeePass/Views/UserControls/ColorPickerUserControl.xaml.cs b/ModernKeePass/Views/UserControls/ColorPickerUserControl.xaml.cs index c6e75e7..b3eb866 100644 --- a/ModernKeePass/Views/UserControls/ColorPickerUserControl.xaml.cs +++ b/ModernKeePass/Views/UserControls/ColorPickerUserControl.xaml.cs @@ -1,9 +1,8 @@ -using System.Collections.Generic; -using System.Linq; -using System.Reflection; +using System.Linq; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Media; +using ModernKeePass.ViewModels; // The User Control item template is documented at http://go.microsoft.com/fwlink/?LinkId=234236 @@ -11,13 +10,7 @@ namespace ModernKeePass.Views.UserControls { public sealed partial class ColorPickerUserControl { - public struct Color - { - public string ColorName { get; set; } - public SolidColorBrush ColorBrush { get; set; } - } - - public List Colors { get; } + private ColorPickerControlVm Model => ComboBox.DataContext as ColorPickerControlVm; public SolidColorBrush SelectedColor { @@ -34,17 +27,17 @@ namespace ModernKeePass.Views.UserControls public ColorPickerUserControl() { InitializeComponent(); - Colors = new List(); - var type = typeof(Windows.UI.Colors); - var properties = type.GetRuntimeProperties().ToArray(); - foreach (var propertyInfo in properties) - { - Colors.Add(new Color - { - ColorName = propertyInfo.Name, - ColorBrush = new SolidColorBrush((Windows.UI.Color)propertyInfo.GetValue(null, null)) - }); - } + } + + private void ComboBox_OnLoaded(object sender, RoutedEventArgs e) + { + Model.Initialize(SelectedColor); + } + + private void ComboBox_OnSelectionChanged(object sender, SelectionChangedEventArgs e) + { + if (e.RemovedItems.Any()) + SelectedColor = ComboBox.SelectedValue as SolidColorBrush; } } } diff --git a/WinAppCommon/ViewModels/UserControls/ColorPickerControlVm.cs b/WinAppCommon/ViewModels/UserControls/ColorPickerControlVm.cs new file mode 100644 index 0000000..4518d6b --- /dev/null +++ b/WinAppCommon/ViewModels/UserControls/ColorPickerControlVm.cs @@ -0,0 +1,56 @@ +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using Windows.UI.Xaml.Media; +using GalaSoft.MvvmLight; + +namespace ModernKeePass.ViewModels +{ + public class ColorPickerControlVm: ObservableObject + { + private Color _selectedItem; + + public class Color + { + public string ColorName { get; set; } + public SolidColorBrush ColorBrush { get; set; } + + public bool Equals(SolidColorBrush color) + { + return color.Color.R == ColorBrush.Color.R && + color.Color.G == ColorBrush.Color.G && + color.Color.B == ColorBrush.Color.B && + color.Color.A == ColorBrush.Color.A; + } + } + + public List Colors { get; } + + public Color SelectedItem + { + get { return _selectedItem; } + set { Set(() => SelectedItem, ref _selectedItem, value); } + } + + public ColorPickerControlVm() + { + Colors = new List(); + var type = typeof(Windows.UI.Colors); + var properties = type.GetRuntimeProperties().ToArray(); + foreach (var propertyInfo in properties) + { + var color = new Color + { + ColorName = propertyInfo.Name, + ColorBrush = new SolidColorBrush((Windows.UI.Color) propertyInfo.GetValue(null, null)) + }; + Colors.Add(color); + } + } + + public void Initialize(SolidColorBrush selectedColor) + { + SelectedItem = Colors.FirstOrDefault(c => c.Equals(selectedColor)); + } + } +} \ No newline at end of file diff --git a/WinAppCommon/ViewModels/ViewModelLocatorCommon.cs b/WinAppCommon/ViewModels/ViewModelLocatorCommon.cs index 7f622dc..fd2f00b 100644 --- a/WinAppCommon/ViewModels/ViewModelLocatorCommon.cs +++ b/WinAppCommon/ViewModels/ViewModelLocatorCommon.cs @@ -67,6 +67,7 @@ namespace ModernKeePass.ViewModels SimpleIoc.Default.Register(); SimpleIoc.Default.Register(); SimpleIoc.Default.Register(); + SimpleIoc.Default.Register(); SimpleIoc.Default.Register(); SimpleIoc.Default.Register(); SimpleIoc.Default.Register(); @@ -82,6 +83,7 @@ namespace ModernKeePass.ViewModels public OpenDatabaseControlVm OpenDatabaseControl => ServiceLocator.Current.GetInstance(Guid.NewGuid().ToString()); public SetCredentialsVm SetCredentials => ServiceLocator.Current.GetInstance(Guid.NewGuid().ToString()); public TopMenuVm TopMenu => ServiceLocator.Current.GetInstance(Guid.NewGuid().ToString()); + public ColorPickerControlVm ColorPicker => ServiceLocator.Current.GetInstance(Guid.NewGuid().ToString()); public NewVm New => ServiceLocator.Current.GetInstance(Guid.NewGuid().ToString()); public OpenVm Open => ServiceLocator.Current.GetInstance(Guid.NewGuid().ToString()); public RecentVm Recent => ServiceLocator.Current.GetInstance(Guid.NewGuid().ToString()); diff --git a/WinAppCommon/WinAppCommon.projitems b/WinAppCommon/WinAppCommon.projitems index db0c6e2..8858859 100644 --- a/WinAppCommon/WinAppCommon.projitems +++ b/WinAppCommon/WinAppCommon.projitems @@ -49,6 +49,7 @@ +