diff --git a/Wino.Mail.ViewModels/Collections/WinoMailCollection.cs b/Wino.Mail.ViewModels/Collections/WinoMailCollection.cs index d1685592..60b44deb 100644 --- a/Wino.Mail.ViewModels/Collections/WinoMailCollection.cs +++ b/Wino.Mail.ViewModels/Collections/WinoMailCollection.cs @@ -75,6 +75,11 @@ public class WinoMailCollection : ObservableRecipient, IRecipient(this); } + public void Cleanup() + { + Messenger.Unregister(this); + } + public async Task ClearAsync() { await ExecuteUIThread(() => diff --git a/Wino.Mail.ViewModels/MailListPageViewModel.cs b/Wino.Mail.ViewModels/MailListPageViewModel.cs index d9d6476c..f8c5bf06 100644 --- a/Wino.Mail.ViewModels/MailListPageViewModel.cs +++ b/Wino.Mail.ViewModels/MailListPageViewModel.cs @@ -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) diff --git a/Wino.Mail.WinUI/Controls/ListView/WinoMailItemViewModelListViewItem.cs b/Wino.Mail.WinUI/Controls/ListView/WinoMailItemViewModelListViewItem.cs index 1de331af..6e95dd4b 100644 --- a/Wino.Mail.WinUI/Controls/ListView/WinoMailItemViewModelListViewItem.cs +++ b/Wino.Mail.WinUI/Controls/ListView/WinoMailItemViewModelListViewItem.cs @@ -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) diff --git a/Wino.Mail.WinUI/Controls/ListView/WinoThreadMailItemViewModelListViewItem.cs b/Wino.Mail.WinUI/Controls/ListView/WinoThreadMailItemViewModelListViewItem.cs index 006275da..d27a1532 100644 --- a/Wino.Mail.WinUI/Controls/ListView/WinoThreadMailItemViewModelListViewItem.cs +++ b/Wino.Mail.WinUI/Controls/ListView/WinoThreadMailItemViewModelListViewItem.cs @@ -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; diff --git a/Wino.Mail.WinUI/Views/MailListPage.xaml b/Wino.Mail.WinUI/Views/MailListPage.xaml index b2f92a7c..c8c2ebeb 100644 --- a/Wino.Mail.WinUI/Views/MailListPage.xaml +++ b/Wino.Mail.WinUI/Views/MailListPage.xaml @@ -92,9 +92,9 @@