Files
Wino-Mail/Wino.Mail.WinUI/Controls/ListView/WinoThreadMailItemViewModelListViewItem.cs
T

83 lines
2.6 KiB
C#
Raw Normal View History

2025-10-27 22:52:26 +01:00
using System.Linq;
using CommunityToolkit.WinUI;
2025-10-26 23:35:09 +01:00
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using Wino.Controls;
using Wino.Helpers;
using Wino.Mail.ViewModels.Data;
namespace Wino.Mail.WinUI.Controls.ListView;
public partial class WinoThreadMailItemViewModelListViewItem : ListViewItem
{
2025-10-27 22:52:26 +01:00
[GeneratedDependencyProperty]
public partial bool IsThreadExpanded { get; set; }
[GeneratedDependencyProperty]
public partial ThreadMailItemViewModel? Item { get; set; }
protected override void OnContentChanged(object oldContent, object newContent)
2025-10-26 23:35:09 +01:00
{
2025-10-27 22:52:26 +01:00
base.OnContentChanged(oldContent, newContent);
2025-10-26 23:35:09 +01:00
2025-10-27 22:52:26 +01:00
if (newContent is ThreadMailItemViewModel threadMailItemViewModel) Item = threadMailItemViewModel;
}
2025-10-26 23:35:09 +01:00
public WinoThreadMailItemViewModelListViewItem()
{
2025-10-27 01:00:38 +01:00
DefaultStyleKey = typeof(WinoThreadMailItemViewModelListViewItem);
}
2025-10-27 22:52:26 +01:00
partial void OnIsThreadExpandedChanged(bool newValue)
2025-10-27 01:00:38 +01:00
{
2025-10-27 22:52:26 +01:00
// 1. Reflect expansion changes to WinoExpander.
// 2. Automatically select first item on expansion, if none selected.
// 3. Unselect all items on collapse.
2025-10-26 23:35:09 +01:00
}
private static void OnIsThreadExpandedChanged(DependencyObject sender, DependencyPropertyChangedEventArgs dp)
{
// 1. Reflect expansion changes to WinoExpander.
// 2. Automatically select first item on expansion, if none selected.
// 3. Unselect all items on collapse.
2025-10-27 22:52:26 +01:00
//var control = sender as WinoThreadMailItemViewModelListViewItem;
2025-10-27 01:43:36 +01:00
2025-10-27 22:52:26 +01:00
//var innerControl = control?.GetWinoListViewControl();
//var expander = control?.GetExpander();
2025-10-26 23:35:09 +01:00
2025-10-27 22:52:26 +01:00
//if (innerControl == null || control == null || expander == null) return;
2025-10-27 01:43:36 +01:00
2025-10-26 23:35:09 +01:00
2025-10-27 22:52:26 +01:00
//// 2
//if (control.IsThreadExpanded && innerControl.SelectedItems.Count == 0 && innerControl.Items.Count > 0)
//{
// innerControl.SelectedItems.Clear();
2025-10-26 23:35:09 +01:00
2025-10-27 22:52:26 +01:00
// // Make item selected, container might not be realized yet, so set on the model.
// // It'll appear selected when container is realized.
2025-10-26 23:35:09 +01:00
2025-10-27 22:52:26 +01:00
// var firstItem = innerControl.Items.FirstOrDefault() as MailItemViewModel;
2025-10-26 23:35:09 +01:00
2025-10-27 22:52:26 +01:00
// firstItem?.IsSelected = true;
//}
2025-10-26 23:35:09 +01:00
2025-10-27 22:52:26 +01:00
//// 1
//expander.IsExpanded = control.IsThreadExpanded;
2025-10-26 23:35:09 +01:00
2025-10-27 22:52:26 +01:00
//// 3
//if (!control.IsSelected) innerControl?.SelectedItems.Clear();
2025-10-26 23:35:09 +01:00
}
public WinoListView? GetWinoListViewControl()
{
var expander = GetExpander();
if (expander?.Content is WinoListView control) return control;
return null;
}
public WinoExpander? GetExpander() => WinoVisualTreeHelper.FindDescendants<WinoExpander>(this).FirstOrDefault();
}