Files
modernkeepass/WinAppCommon/Controls/SelectableTemplateListView.cs
Geoffroy BONNEVILLE bb2b99ed66 Additional fields Add, Update and Delete work (too well)
SelectableListView works when programmatically setting selection
2020-05-11 10:53:14 +02:00

51 lines
2.0 KiB
C#

using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
namespace ModernKeePass.Controls
{
public class SelectableTemplateListView: ListView
{
public DataTemplate SelectedItemTemplate
{
get { return (DataTemplate)GetValue(SelectedItemTemplateProperty); }
set { SetValue(SelectedItemTemplateProperty, value); }
}
public static readonly DependencyProperty SelectedItemTemplateProperty =
DependencyProperty.Register(
nameof(SelectedItemTemplate),
typeof(DataTemplate),
typeof(PasswordBoxWithButton),
new PropertyMetadata(null, (o, args) => { }));
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;
if (listView == null) return;
foreach (var item in e.AddedItems)
{
var listViewItem = listView.ContainerFromItem(item) as ListViewItem;
if (listViewItem != null) listViewItem.ContentTemplate = SelectedItemTemplate;
}
//Remove DataTemplate for unselected items
foreach (var item in e.RemovedItems)
{
var listViewItem = listView.ContainerFromItem(item) as ListViewItem;
if (listViewItem != null) listViewItem.ContentTemplate = ItemTemplate;
}
}
}
}