Bunch of improvements i dunno.
This commit is contained in:
@@ -13,9 +13,6 @@ public partial class WinoListView : Microsoft.UI.Xaml.Controls.ListView
|
||||
private const string PART_ScrollViewer = "ScrollViewer";
|
||||
private ScrollViewer? internalScrollviewer;
|
||||
|
||||
private double lastestRaisedOffset = 0;
|
||||
private int lastItemSize = 0;
|
||||
|
||||
[GeneratedDependencyProperty]
|
||||
public partial bool IsThreadListView { get; set; }
|
||||
|
||||
@@ -47,24 +44,55 @@ public partial class WinoListView : Microsoft.UI.Xaml.Controls.ListView
|
||||
double progress = internalScrollviewer.VerticalOffset / internalScrollviewer.ScrollableHeight;
|
||||
|
||||
// Trigger when scrolled past 90% of total height
|
||||
if (progress >= 0.9) LoadMoreCommand?.Execute(null);
|
||||
if (progress >= 0.9)
|
||||
{
|
||||
bool canLoadMore = LoadMoreCommand?.CanExecute(null) ?? false;
|
||||
|
||||
if (canLoadMore)
|
||||
{
|
||||
LoadMoreCommand?.Execute(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected override void PrepareContainerForItemOverride(DependencyObject element, object item)
|
||||
{
|
||||
base.PrepareContainerForItemOverride(element, item);
|
||||
|
||||
// Ensure the container's selection state matches the model's state
|
||||
// This is crucial for virtualization scenarios where containers are recycled
|
||||
|
||||
if (item is MailItemViewModel mailItemViewModel
|
||||
&& element is WinoMailItemViewModelListViewItem container
|
||||
&& container.Item != mailItemViewModel)
|
||||
{
|
||||
container.Item = mailItemViewModel;
|
||||
container.IsSelected = mailItemViewModel.IsSelected;
|
||||
}
|
||||
else if (item is ThreadMailItemViewModel threadMailItemViewModel
|
||||
&& element is WinoThreadMailItemViewModelListViewItem threadContainer
|
||||
&& threadContainer.Item != threadMailItemViewModel)
|
||||
{
|
||||
threadContainer.Item = threadMailItemViewModel;
|
||||
threadContainer.IsSelected = threadMailItemViewModel.IsSelected;
|
||||
threadContainer.IsThreadExpanded = threadMailItemViewModel.IsThreadExpanded;
|
||||
}
|
||||
}
|
||||
|
||||
protected override void ClearContainerForItemOverride(DependencyObject element, object item)
|
||||
{
|
||||
base.ClearContainerForItemOverride(element, item);
|
||||
|
||||
if (item is MailItemViewModel mailItemViewModel && element is WinoMailItemViewModelListViewItem container)
|
||||
{
|
||||
// Ensure the container's selection state matches the model's state
|
||||
// This is crucial for virtualization scenarios where containers are recycled
|
||||
|
||||
container.IsSelected = mailItemViewModel.IsSelected;
|
||||
container.Item = null;
|
||||
container.IsSelected = false;
|
||||
}
|
||||
else if (item is ThreadMailItemViewModel threadMailItemViewModel && element is WinoThreadMailItemViewModelListViewItem threadContainer)
|
||||
{
|
||||
threadContainer.IsSelected = threadMailItemViewModel.IsSelected;
|
||||
threadContainer.IsThreadExpanded = threadMailItemViewModel.IsThreadExpanded;
|
||||
threadContainer.Item = null;
|
||||
threadContainer.IsSelected = false;
|
||||
threadContainer.IsThreadExpanded = false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -93,24 +121,6 @@ public partial class WinoListView : Microsoft.UI.Xaml.Controls.ListView
|
||||
public WinoThreadMailItemViewModelListViewItem? GetThreadMailItemContainer(ThreadMailItemViewModel threadMailItemViewModel)
|
||||
=> ContainerFromItem(threadMailItemViewModel) as WinoThreadMailItemViewModelListViewItem;
|
||||
|
||||
public void ToggleItemContainer(IMailListItem mailListItem)
|
||||
{
|
||||
DispatcherQueue.TryEnqueue(() =>
|
||||
{
|
||||
if (mailListItem is MailItemViewModel mailItemViewModel)
|
||||
{
|
||||
var container = GetMailItemContainer(mailItemViewModel);
|
||||
container?.IsSelected = mailItemViewModel.IsSelected;
|
||||
}
|
||||
else if (mailListItem is ThreadMailItemViewModel threadMailItemViewModel)
|
||||
{
|
||||
var container = GetThreadMailItemContainer(threadMailItemViewModel);
|
||||
container?.IsSelected = threadMailItemViewModel.IsSelected;
|
||||
container?.IsThreadExpanded = threadMailItemViewModel.IsThreadExpanded;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public bool SelectMailItemContainer(MailItemViewModel mailItemViewModel)
|
||||
{
|
||||
WinoMailItemViewModelListViewItem? itemContainer = null;
|
||||
@@ -178,6 +188,7 @@ public partial class WinoListView : Microsoft.UI.Xaml.Controls.ListView
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void Cleanup()
|
||||
{
|
||||
DragItemsStarting -= ItemDragStarting;
|
||||
|
||||
@@ -13,11 +13,4 @@ public partial class WinoMailItemViewModelListViewItem : ListViewItem
|
||||
{
|
||||
DefaultStyleKey = typeof(WinoMailItemViewModelListViewItem);
|
||||
}
|
||||
|
||||
protected override void OnContentChanged(object oldContent, object newContent)
|
||||
{
|
||||
base.OnContentChanged(oldContent, newContent);
|
||||
|
||||
if (newContent is MailItemViewModel mailItemViewModel) Item = mailItemViewModel;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
using System.Linq;
|
||||
using CommunityToolkit.WinUI;
|
||||
using Microsoft.UI.Xaml;
|
||||
using Microsoft.UI.Xaml.Controls;
|
||||
using Wino.Controls;
|
||||
using Wino.Helpers;
|
||||
@@ -16,59 +15,12 @@ public partial class WinoThreadMailItemViewModelListViewItem : ListViewItem
|
||||
[GeneratedDependencyProperty]
|
||||
public partial ThreadMailItemViewModel? Item { get; set; }
|
||||
|
||||
protected override void OnContentChanged(object oldContent, object newContent)
|
||||
{
|
||||
base.OnContentChanged(oldContent, newContent);
|
||||
|
||||
if (newContent is ThreadMailItemViewModel threadMailItemViewModel) Item = threadMailItemViewModel;
|
||||
}
|
||||
|
||||
public WinoThreadMailItemViewModelListViewItem()
|
||||
{
|
||||
DefaultStyleKey = typeof(WinoThreadMailItemViewModelListViewItem);
|
||||
}
|
||||
|
||||
partial void OnIsThreadExpandedChanged(bool newValue)
|
||||
{
|
||||
// 1. Reflect expansion changes to WinoExpander.
|
||||
// 2. Automatically select first item on expansion, if none selected.
|
||||
// 3. Unselect all items on collapse.
|
||||
}
|
||||
|
||||
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.
|
||||
|
||||
//var control = sender as WinoThreadMailItemViewModelListViewItem;
|
||||
|
||||
//var innerControl = control?.GetWinoListViewControl();
|
||||
//var expander = control?.GetExpander();
|
||||
|
||||
//if (innerControl == null || control == null || expander == null) return;
|
||||
|
||||
|
||||
//// 2
|
||||
//if (control.IsThreadExpanded && innerControl.SelectedItems.Count == 0 && innerControl.Items.Count > 0)
|
||||
//{
|
||||
// innerControl.SelectedItems.Clear();
|
||||
|
||||
// // Make item selected, container might not be realized yet, so set on the model.
|
||||
// // It'll appear selected when container is realized.
|
||||
|
||||
// var firstItem = innerControl.Items.FirstOrDefault() as MailItemViewModel;
|
||||
|
||||
// firstItem?.IsSelected = true;
|
||||
//}
|
||||
|
||||
//// 1
|
||||
//expander.IsExpanded = control.IsThreadExpanded;
|
||||
|
||||
//// 3
|
||||
//if (!control.IsSelected) innerControl?.SelectedItems.Clear();
|
||||
}
|
||||
|
||||
public WinoListView? GetWinoListViewControl()
|
||||
{
|
||||
var expander = GetExpander();
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
<Identity
|
||||
Name="58272BurakKSE.WinoMailPreview"
|
||||
Publisher="CN=51FBDAF3-E212-4149-89A2-A2636B3BC911"
|
||||
Version="0.0.4.0" />
|
||||
Version="0.0.7.0" />
|
||||
|
||||
<mp:PhoneIdentity PhoneProductId="3879fcfb-a561-4599-9103-e0c9b35a271f" PhonePublisherId="00000000-0000-0000-0000-000000000000"/>
|
||||
|
||||
|
||||
@@ -154,17 +154,20 @@ public sealed partial class MailListPage : MailListPageAbstract,
|
||||
|
||||
private void WinoListViewChoosingItemContainer(ListViewBase sender, ChoosingItemContainerEventArgs args)
|
||||
{
|
||||
if (args.Item is ThreadMailItemViewModel)
|
||||
if (args.Item is ThreadMailItemViewModel && args.ItemContainer is not WinoThreadMailItemViewModelListViewItem)
|
||||
{
|
||||
args.ItemContainer = new WinoThreadMailItemViewModelListViewItem();
|
||||
args.ItemContainer = new WinoThreadMailItemViewModelListViewItem()
|
||||
{
|
||||
Item = args.Item as ThreadMailItemViewModel
|
||||
};
|
||||
}
|
||||
else if (args.Item is MailItemViewModel)
|
||||
else if (args.Item is MailItemViewModel && args.ItemContainer is not WinoMailItemViewModelListViewItem)
|
||||
{
|
||||
args.ItemContainer = new WinoMailItemViewModelListViewItem();
|
||||
args.ItemContainer = new WinoMailItemViewModelListViewItem()
|
||||
{
|
||||
Item = args.Item as MailItemViewModel
|
||||
};
|
||||
}
|
||||
|
||||
// Handle the preparation in PrepareContainerForItemOverride
|
||||
args.IsContainerPrepared = false;
|
||||
}
|
||||
|
||||
private async void MailItemContextRequested(UIElement sender, ContextRequestedEventArgs args)
|
||||
|
||||
Reference in New Issue
Block a user