More interactions with threads.
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user