Additional fields Add, Update and Delete work (too well)

SelectableListView works when programmatically setting selection
This commit is contained in:
Geoffroy BONNEVILLE
2020-05-11 10:53:14 +02:00
parent 71b6009a29
commit bb2b99ed66
20 changed files with 274 additions and 101 deletions

View File

@@ -19,9 +19,17 @@ namespace ModernKeePass.Controls
public SelectableTemplateListView()
{
ContainerContentChanging += SelectableTemplateListView_ContainerContentChanging;
SelectionChanged += SelectableTemplateListView_SelectionChanged;
}
private void SelectableTemplateListView_ContainerContentChanging(ListViewBase sender, ContainerContentChangingEventArgs args)
{
args.ItemContainer.ContentTemplate = args.ItemContainer.IsSelected
? SelectedItemTemplate
: ItemTemplate;
}
private void SelectableTemplateListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
var listView = sender as ListView;

View File

@@ -0,0 +1,9 @@
namespace Messages
{
public class EntryFieldNameChangedMessage
{
public string OldName { get; set; }
public string NewName { get; set; }
public string Value { get; set; }
}
}

View File

@@ -0,0 +1,8 @@
namespace Messages
{
public class EntryFieldValueChangedMessage
{
public string FieldName { get; set; }
public string FieldValue { get; set; }
}
}

View File

@@ -0,0 +1,37 @@
using GalaSoft.MvvmLight;
using Messages;
namespace ModernKeePass.ViewModels.ListItems
{
public class FieldVm: ViewModelBase
{
private string _name;
private string _value;
public string Name
{
get { return _name; }
set
{
MessengerInstance.Send(new EntryFieldNameChangedMessage { OldName = Name, NewName = value, Value = Value });
Set(nameof(Name), ref _name, value);
}
}
public string Value
{
get { return _value; }
set
{
MessengerInstance.Send(new EntryFieldValueChangedMessage { FieldName = Name, FieldValue = value });
Set(nameof(Value), ref _value, value);
}
}
public FieldVm(string fieldName, string fieldValue)
{
_name = fieldName;
_value = fieldValue;
}
}
}

View File

@@ -13,6 +13,7 @@ namespace ModernKeePass.ViewModels
{
private readonly IRecentProxy _recent;
private ObservableCollection<RecentItemVm> _recentItems;
private int _selectedIndex;
public ObservableCollection<RecentItemVm> RecentItems
{
@@ -21,7 +22,13 @@ namespace ModernKeePass.ViewModels
}
public ICommand ClearAllCommand { get; }
public int SelectedIndex
{
get { return _selectedIndex; }
set { Set(() => SelectedIndex, ref _selectedIndex, value); }
}
public RecentVm(IRecentProxy recent)
{
_recent = recent;
@@ -34,6 +41,7 @@ namespace ModernKeePass.ViewModels
{
var recentItems = _recent.GetAll().Select(r => new RecentItemVm(r));
RecentItems = new ObservableCollection<RecentItemVm>(recentItems);
if (RecentItems.Any()) SelectedIndex = 0;
}
private void ClearAll()

View File

@@ -36,10 +36,13 @@
<Compile Include="$(MSBuildThisFileDirectory)Messages\DatabaseOpenedMessage.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Messages\DatabaseOpeningMessage.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Messages\DatabaseSavedMessage.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Messages\EntryFieldNameChangedMessage.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Messages\EntryFieldValueChangedMessage.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Messages\FileNotFoundMessage.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Messages\NavigateToPageMessage.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Messages\SaveErrorMessage.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ViewModels\AboutVm.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ViewModels\Items\FieldVm.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ViewModels\ViewModelLocatorCommon.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ViewModels\Items\ListMenuItemVm.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ViewModels\Items\MainMenuItemVm.cs" />