More interactions with threads.

This commit is contained in:
Burak Kaan Köse
2025-10-27 01:43:36 +01:00
parent 54ac07f6fb
commit 103841c364
6 changed files with 43 additions and 19 deletions
@@ -75,6 +75,11 @@ public class WinoMailCollection : ObservableRecipient, IRecipient<SelectedItemsC
Messenger.Register<SelectedItemsChangedMessage>(this);
}
public void Cleanup()
{
Messenger.Unregister<SelectedItemsChangedMessage>(this);
}
public async Task ClearAsync()
{
await ExecuteUIThread(() =>
@@ -204,11 +204,14 @@ public partial class MailListPageViewModel : MailBaseViewModel,
MailCollection.ItemSelectionChanged += MailItemSelectionChanged;
}
public override void OnNavigatedFrom(NavigationMode mode, object parameters)
public override async void OnNavigatedFrom(NavigationMode mode, object parameters)
{
base.OnNavigatedFrom(mode, parameters);
MailCollection.ItemSelectionChanged -= MailItemSelectionChanged;
await MailCollection.ClearAsync();
MailCollection.Cleanup();
}
private void MailItemSelectionChanged(object sender, EventArgs e)
@@ -71,11 +71,8 @@ public partial class WinoMailItemViewModelListViewItem : ListViewItem
private void ApplySelectionForModel(IMailListItem mailItem)
{
if (mailItem.IsSelected != IsSelected)
{
mailItem.IsSelected = IsSelected;
WeakReferenceMessenger.Default.Send(new SelectedItemsChangedMessage());
}
mailItem.IsSelected = IsSelected;
WeakReferenceMessenger.Default.Send(new SelectedItemsChangedMessage());
}
private void ApplySelectionForContainer(IMailListItem mailItem)
@@ -49,15 +49,23 @@ public partial class WinoThreadMailItemViewModelListViewItem : ListViewItem
if (innerControl == null || control == null || expander == null) return;
// 1
expander.IsExpanded = control.IsThreadExpanded;
// 2
if (control.IsThreadExpanded && innerControl.SelectedItems.Count == 0 && innerControl.Items.Count > 0)
{
innerControl.SelectedItem = innerControl.Items[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();
}
@@ -103,14 +111,6 @@ public partial class WinoThreadMailItemViewModelListViewItem : ListViewItem
mailItem.PropertyChanged += MailPropChanged;
}
private void ApplySelectionForModel(ThreadMailItemViewModel mailItem)
{
if (mailItem.IsThreadExpanded != IsThreadExpanded)
{
mailItem.IsThreadExpanded = IsThreadExpanded;
}
}
private void ApplySelectionForContainer(ThreadMailItemViewModel mailItem)
{
if (IsThreadExpanded != mailItem.IsThreadExpanded) IsThreadExpanded = mailItem.IsThreadExpanded;
+4 -2
View File
@@ -92,9 +92,9 @@
<listview:WinoListView
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Stretch"
ChoosingItemContainer="WinoListViewChoosingItemContainer"
toolkitExt:ListViewExtensions.ItemContainerStretchDirection="Horizontal"
toolkitExt:ScrollViewerExtensions.VerticalScrollBarMargin="0"
ChoosingItemContainer="WinoListViewChoosingItemContainer"
ItemContainerStyle="{StaticResource DefaultMailListViewItemStyle}"
ItemTemplate="{StaticResource SingleMailItemTemplate}"
ItemsSource="{x:Bind ThreadEmails, Mode=OneTime}"
@@ -381,10 +381,12 @@
<listview:WinoListView
x:Name="MailListView"
HorizontalAlignment="Stretch"
ChoosingItemContainer="WinoListViewChoosingItemContainer"
HorizontalContentAlignment="Stretch"
toolkitExt:ListViewExtensions.ItemContainerStretchDirection="Horizontal"
toolkitExt:ScrollViewerExtensions.VerticalScrollBarMargin="0"
ChoosingItemContainer="WinoListViewChoosingItemContainer"
IsItemClickEnabled="True"
ItemClick="WinoListView_ItemClick"
ItemContainerStyleSelector="{StaticResource WinoMailItemContainerStyleSelector}"
ItemTemplateSelector="{StaticResource MailItemTemplateSelector}"
ItemsSource="{x:Bind MailCollectionViewSource.View, Mode=OneWay}"
@@ -70,6 +70,8 @@ public sealed partial class MailListPage : MailListPageAbstract,
this.Bindings.StopTracking();
ViewModel.MailCollection.ItemSelectionChanged -= WinoMailCollectionSelectionChanged;
SelectAllCheckbox.Checked -= SelectAllCheckboxChecked;
SelectAllCheckbox.Unchecked -= SelectAllCheckboxUnchecked;
RenderingFrame.Navigate(typeof(IdlePage));
@@ -547,4 +549,19 @@ public sealed partial class MailListPage : MailListPageAbstract,
{
}
private void WinoListView_ItemClick(object sender, ItemClickEventArgs e)
{
if (e.ClickedItem is ThreadMailItemViewModel clickedThread)
{
// Only if container is selected.
var threadContainer = MailListView.ContainerFromItem(clickedThread) as WinoThreadMailItemViewModelListViewItem;
if (threadContainer?.IsSelected ?? false)
{
clickedThread.IsThreadExpanded = !clickedThread.IsThreadExpanded;
}
}
}
}