More interactions with threads.
This commit is contained in:
@@ -75,6 +75,11 @@ public class WinoMailCollection : ObservableRecipient, IRecipient<SelectedItemsC
|
|||||||
Messenger.Register<SelectedItemsChangedMessage>(this);
|
Messenger.Register<SelectedItemsChangedMessage>(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Cleanup()
|
||||||
|
{
|
||||||
|
Messenger.Unregister<SelectedItemsChangedMessage>(this);
|
||||||
|
}
|
||||||
|
|
||||||
public async Task ClearAsync()
|
public async Task ClearAsync()
|
||||||
{
|
{
|
||||||
await ExecuteUIThread(() =>
|
await ExecuteUIThread(() =>
|
||||||
|
|||||||
@@ -204,11 +204,14 @@ public partial class MailListPageViewModel : MailBaseViewModel,
|
|||||||
MailCollection.ItemSelectionChanged += MailItemSelectionChanged;
|
MailCollection.ItemSelectionChanged += MailItemSelectionChanged;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnNavigatedFrom(NavigationMode mode, object parameters)
|
public override async void OnNavigatedFrom(NavigationMode mode, object parameters)
|
||||||
{
|
{
|
||||||
base.OnNavigatedFrom(mode, parameters);
|
base.OnNavigatedFrom(mode, parameters);
|
||||||
|
|
||||||
MailCollection.ItemSelectionChanged -= MailItemSelectionChanged;
|
MailCollection.ItemSelectionChanged -= MailItemSelectionChanged;
|
||||||
|
|
||||||
|
await MailCollection.ClearAsync();
|
||||||
|
MailCollection.Cleanup();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void MailItemSelectionChanged(object sender, EventArgs e)
|
private void MailItemSelectionChanged(object sender, EventArgs e)
|
||||||
|
|||||||
@@ -71,11 +71,8 @@ public partial class WinoMailItemViewModelListViewItem : ListViewItem
|
|||||||
|
|
||||||
private void ApplySelectionForModel(IMailListItem mailItem)
|
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)
|
private void ApplySelectionForContainer(IMailListItem mailItem)
|
||||||
|
|||||||
@@ -49,15 +49,23 @@ public partial class WinoThreadMailItemViewModelListViewItem : ListViewItem
|
|||||||
|
|
||||||
if (innerControl == null || control == null || expander == null) return;
|
if (innerControl == null || control == null || expander == null) return;
|
||||||
|
|
||||||
// 1
|
|
||||||
expander.IsExpanded = control.IsThreadExpanded;
|
|
||||||
|
|
||||||
// 2
|
// 2
|
||||||
if (control.IsThreadExpanded && innerControl.SelectedItems.Count == 0 && innerControl.Items.Count > 0)
|
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
|
// 3
|
||||||
if (!control.IsSelected) innerControl?.SelectedItems.Clear();
|
if (!control.IsSelected) innerControl?.SelectedItems.Clear();
|
||||||
}
|
}
|
||||||
@@ -103,14 +111,6 @@ public partial class WinoThreadMailItemViewModelListViewItem : ListViewItem
|
|||||||
mailItem.PropertyChanged += MailPropChanged;
|
mailItem.PropertyChanged += MailPropChanged;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ApplySelectionForModel(ThreadMailItemViewModel mailItem)
|
|
||||||
{
|
|
||||||
if (mailItem.IsThreadExpanded != IsThreadExpanded)
|
|
||||||
{
|
|
||||||
mailItem.IsThreadExpanded = IsThreadExpanded;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void ApplySelectionForContainer(ThreadMailItemViewModel mailItem)
|
private void ApplySelectionForContainer(ThreadMailItemViewModel mailItem)
|
||||||
{
|
{
|
||||||
if (IsThreadExpanded != mailItem.IsThreadExpanded) IsThreadExpanded = mailItem.IsThreadExpanded;
|
if (IsThreadExpanded != mailItem.IsThreadExpanded) IsThreadExpanded = mailItem.IsThreadExpanded;
|
||||||
|
|||||||
@@ -92,9 +92,9 @@
|
|||||||
<listview:WinoListView
|
<listview:WinoListView
|
||||||
HorizontalAlignment="Stretch"
|
HorizontalAlignment="Stretch"
|
||||||
HorizontalContentAlignment="Stretch"
|
HorizontalContentAlignment="Stretch"
|
||||||
ChoosingItemContainer="WinoListViewChoosingItemContainer"
|
|
||||||
toolkitExt:ListViewExtensions.ItemContainerStretchDirection="Horizontal"
|
toolkitExt:ListViewExtensions.ItemContainerStretchDirection="Horizontal"
|
||||||
toolkitExt:ScrollViewerExtensions.VerticalScrollBarMargin="0"
|
toolkitExt:ScrollViewerExtensions.VerticalScrollBarMargin="0"
|
||||||
|
ChoosingItemContainer="WinoListViewChoosingItemContainer"
|
||||||
ItemContainerStyle="{StaticResource DefaultMailListViewItemStyle}"
|
ItemContainerStyle="{StaticResource DefaultMailListViewItemStyle}"
|
||||||
ItemTemplate="{StaticResource SingleMailItemTemplate}"
|
ItemTemplate="{StaticResource SingleMailItemTemplate}"
|
||||||
ItemsSource="{x:Bind ThreadEmails, Mode=OneTime}"
|
ItemsSource="{x:Bind ThreadEmails, Mode=OneTime}"
|
||||||
@@ -381,10 +381,12 @@
|
|||||||
<listview:WinoListView
|
<listview:WinoListView
|
||||||
x:Name="MailListView"
|
x:Name="MailListView"
|
||||||
HorizontalAlignment="Stretch"
|
HorizontalAlignment="Stretch"
|
||||||
ChoosingItemContainer="WinoListViewChoosingItemContainer"
|
|
||||||
HorizontalContentAlignment="Stretch"
|
HorizontalContentAlignment="Stretch"
|
||||||
toolkitExt:ListViewExtensions.ItemContainerStretchDirection="Horizontal"
|
toolkitExt:ListViewExtensions.ItemContainerStretchDirection="Horizontal"
|
||||||
toolkitExt:ScrollViewerExtensions.VerticalScrollBarMargin="0"
|
toolkitExt:ScrollViewerExtensions.VerticalScrollBarMargin="0"
|
||||||
|
ChoosingItemContainer="WinoListViewChoosingItemContainer"
|
||||||
|
IsItemClickEnabled="True"
|
||||||
|
ItemClick="WinoListView_ItemClick"
|
||||||
ItemContainerStyleSelector="{StaticResource WinoMailItemContainerStyleSelector}"
|
ItemContainerStyleSelector="{StaticResource WinoMailItemContainerStyleSelector}"
|
||||||
ItemTemplateSelector="{StaticResource MailItemTemplateSelector}"
|
ItemTemplateSelector="{StaticResource MailItemTemplateSelector}"
|
||||||
ItemsSource="{x:Bind MailCollectionViewSource.View, Mode=OneWay}"
|
ItemsSource="{x:Bind MailCollectionViewSource.View, Mode=OneWay}"
|
||||||
|
|||||||
@@ -70,6 +70,8 @@ public sealed partial class MailListPage : MailListPageAbstract,
|
|||||||
this.Bindings.StopTracking();
|
this.Bindings.StopTracking();
|
||||||
|
|
||||||
ViewModel.MailCollection.ItemSelectionChanged -= WinoMailCollectionSelectionChanged;
|
ViewModel.MailCollection.ItemSelectionChanged -= WinoMailCollectionSelectionChanged;
|
||||||
|
SelectAllCheckbox.Checked -= SelectAllCheckboxChecked;
|
||||||
|
SelectAllCheckbox.Unchecked -= SelectAllCheckboxUnchecked;
|
||||||
|
|
||||||
RenderingFrame.Navigate(typeof(IdlePage));
|
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