Changes

Multi Select (UBIK Client)

6,267 bytes added, 12 June
/* Multi select for filtered lists */ Added more clear note to the final Hint
=== Activating the Multi Select Mode =multi select mode ==
<tabs>
<tab name="UWP">
Clicking on a Multi Select button, which will appear when hovering over an itema list, activates the Multi Select mode. A panel at the left side gets displayed.
</tab>
</tabs>
=In XAML code, you can use <code>ListViewModel.BulkOperation.ToggleMultiSelectCommand</code> to (de)activate the multi select mode.  == Multi Select select panel ===
<tabs>
The first one is for selecting all items, the second for deselecting all items at one click. The {{key press|x}} button closes the panel and deactivates the Multi Select mode.
Further, the panel contains two tabs.
The "properties" tab displays all common editable properties of the selected items. If none are selected, or if the selected items dont don't share any common properties, it will remain empty.
The "other options" tab contains buttons to perform actions on all selected items.
</tab>
By navigating away from the related content page, all active Multi Select modes get deactivated automatically.
[[Category:WinX|Mass Edit (UBIK WinX)]]
=== Selection ===
[[File:UBIKCPLXUI_MultiSelect1.JPG|thumb|Multi Select mode (XAMARIN)]]
By default, all objects are deselected when the Multi Select Mode gets invoked. Items can be selected by tapping on them. Therefore, navigating into an object in the list by tapping on it is no longer available. To be able to navigate again, the Multi Select mode needs to be exitedturned off.
To select or deselect all items, <code>MultiSelectViewModelListViewModel.BulkOperation.SelectAllCommand</code> or <code>MultiSelectViewModelListViewModel.BulkOperation.DeselectAllCommand</code> can be used as command binding. These options are currently not yet included presented in the standard XAMARIN UI. In UWP, there are some additional selection related options besides "Select All" and "Deselect All". Selecting or deselecting a bunch of items in a row can be achieved by holding shift and first clicking on the first required item and then clicking on the last required item.
In UWP, there are some additional selection options further to the "Select All" and "Deselect All" buttons. Selecting or deselecting a bunch of items in a row can be achieved by holding shift and first clicking on the first required item and then clicking on the last required item.
[[Category:WinX|Mass Edit (UBIK WinX)]]
== Performing Actions actions on selected items ==
The following actions are currently available in Multi Select mode:
* Revert local changes (*)
Actions marked with (*) are currently not yet included presented in the standard XAMARIN UI. But they can be easily customized in XAML code with the following commands.
==== Copy and Paste =paste ===To copy multiple branches, the <code>ListViewModel.BulkOperation.CopyBranchesCommand</code> can be used without any additional CommandParameters.The <code>ContentViewModel.PasteBranchCommand</code> already supports pasting multiple branches, therefore, it can be used to paste the previously copied objects. To clarify, the UI (XAMARIN & UWP) does not include pasting content into the selected objects, rather pasting multiple, previously copied branches into one object. This can be done eg. via the Paste option in the Context Menu.
[[Category:WinX|Mass Edit (UBIK WinX)]]=== Download branches ===To download multiple branches, <code>ListViewModel.BulkOperation.InvokeOnItemsCommand</code> with a KeyValueList containing <code>Key="Command"</code> and <code>Value="BranchDownloadCommand"</code> as CommandParameter can be used.
==== Download Branches =Discard content ===To download multiple branchesdiscard selected objects, <code>ListViewModel.BulkOperation.InvokeOnItemsCommand</code> with a KeyValueList containing <code>Key="Command"</code> and <code>Value="BranchDownloadCommandDiscardContentCommand"</code> as CommandParameter can be used.
==== Discard Content =Delete content ===To discard delete selected objects, <code>ListViewModel.BulkOperation.InvokeOnItemsCommand</code> with a KeyValueList containing <code>Key="Command"</code> and <code>Value="DiscardContentCommandDeleteContentCommand"</code> as CommandParameter can be used.
==== Delete Content ====To delete selected objects, <code>InvokeOnItemsCommand</code> with a KeyValueList containing <code>Key="Command"</code> and <code>Value="DeleteContentCommand"</code> as CommandParameter can be used. ==== Download and Checkout =checkout ===The Download and Checkout actions are not yet included in the XAMARIN UI. As shown in the following UWP example, it This can be provided like achieved by using the command for Downloadingdownloading, just with an additional KeyValueParameter to set the <code>Key="CheckOut"</code> to "True" as CommandParameter:
<source lang = "xml">
<Button ... Command="{Binding ListViewModel.BulkOperation.InvokeOnItemsCommand}">
<Button.CommandParameter>
<controls:KeyValueList>
</source>
[[Category:WinX|Mass Edit (UBIK WinX)]]=== Checkout ===To checkout selected objects, <code>ListViewModel.BulkOperation.InvokeOnItemsCommand</code> with a KeyValueList containing <code>Key="Command"</code> and <code>Value="CheckOutContentCommand"</code> as CommandParameter can be used.
==== Checkout =Release ===To checkout release selected objects, <code>ListViewModel.BulkOperation.InvokeOnItemsCommand</code> with a KeyValueList containing <code>Key="Command"</code> and <code>Value="CheckOutContentCommandReleaseContentCommand"</code> as CommandParameter can be used.
[[Category:WinX|Mass Edit (UBIK WinX)]]=== Revert local changes ===To revert local changes on objects, <code>ListViewModel.BulkOperation.InvokeOnItemsCommand</code> with a KeyValueList containing <code>Key="Command"</code> and <code>Value="RevertLocalChangesCommand"</code> as CommandParameter can be used.
==== Release ====
Releasing selected objects is similar to the Checkout action, except for one parameter. Therefore, the <code>InvokeOnItemsCommand</code> with a KeyValueList containing <code>Key="Command"</code> and <code>Value="ReleaseContentCommand"</code> and a KeyValueList with <code>Key="SelectedItemsOnly"</code> set to <code>Value="True"</code> as CommandParameter can be implemented. The Release action is not yet included in the XAMARIN UI.
==== Revert local changes ====To revert locally executed changes on objects, the <code>InvokeOnItemsCommand</code> with a KeyValueList containing <code>Key="Command"</code> and <code>Value="RevertLocalChangesCommand"</code> as CommandParameter should be used. The Revert local changes action is not yet included in the XAMARIN UI. [[Category:WinX|Mass Edit (UBIK WinX)]] == Editing common Properties properties of selected items (UWP only) ==
When selecting or deselecting objects, the commonly shared properties on the left side are constantly updated during that process.
{{Hint|If the property being edited has various values, a default value (instead of the actual ones) is shown in the editor. E.g. empty for string type, false for boolean type, etc.}}
Further editing of Link properties is currently not supported for multiple objects. Although the related button in the Guid editor dialog is clickable, it is currently inoperable. Also the ''Skipping the dialog'' feature (see [https://wiki.augmensys.com/index.php?title=Editors#Guid_editor| Guid Editor Wiki]) is currently not supported in Multi Select mode.
 
 
 
 
 
 
== Multi select for filtered lists ==
 
In the standard UI, multi selection targets the original unfiltered lists. However, those lists are often presented in several filtered lists in many cases. See content filtering in [[XAML_Changes_in_UBIK_WinX_3.5#Filtering_by_expressions|UWP]] and in [[Xamarin_XAML#Content_filtering|Xamarin]].
 
The multi select related XAML code (essentially <code>ListViewModel.BulkOperation</code>) in the standard UI can not be used directly in such scenarios. Because all filtered lists share the same original source list (<code>ListViewModel</code>). If the multi select feature is turned on from the original source list, all filtered lists will be affected.
 
For example, a source list can be divided into two filtered lists, one for finished tasks and the other for the unfinished ones. If you use the <code>ListViewModel.BulkOperation.SelectAllCommand</code>, it will select all tasks even though in the UI it will appear as if only those finished/unfinished are selected.
 
To avoid such a situation, the multi select feature should be turned on from the filtered lists instead. This means the following types:
* UWP: ListCollectionView;
* Xamarin: SfDataSourceExt.
 
Here's also an example of multi select related XAML code adapted for a filtered list.
 
<tabs>
<tab name="UWP">
<source lang = "xml">
<Grid
xmlns:cv="using:UBIK.WinX.UI.CollectionView"
xmlns:controls="using:UBIK.WinX.Controls"
xmlns:interactivity="using:Microsoft.Xaml.Interactivity"
xmlns:core="using:Microsoft.Xaml.Interactions.Core">
<Grid.Resources>
<x:String x:Key="FilterExpression">Item.Header.ToLower().Contains(&quot;1&quot;)==true</x:String>
<cv:ListCollectionView x:Key="FilteredList" Expression="{StaticResource FilterExpression}" ItemsSource="{Binding Children.Items}" />
</Grid.Resources>
 
...
<!-- Multi Select Panel -->
<ContentControl
...
ContentTemplate="{Binding TemplateService[UBIKMultiSelectPanel]}"
DataContext="{StaticResource FilteredList}"
Visibility="{Binding BulkOperation.ItemSelectionMode, Source={StaticResource FilteredList}, Converter={StaticResource EqualToVisConverter}, ConverterParameter=Multiple, FallbackValue=Collapsed, TargetNullValue=Collapsed}">
</ContentControl>
 
...
<!-- Filtered List -->
<controls:SelectionBoundListView
IsItemClickEnabled="False"
ItemsSource="{StaticResource FilteredList}"
SelectionMode="{Binding BulkOperation.ItemSelectionMode, Source={StaticResource FilteredList}, Converter={StaticResource ChildItemSelectionModeToListViewSelectionModeConverter}}">
<interactivity:Interaction.Behaviors>
<core:EventTriggerBehavior EventName="SelectionChanged">
<core:InvokeCommandAction Command="{Binding BulkOperation.ItemSelectionChangedCommand, Source={StaticResource FilteredList}}" InputConverter="{StaticResource SelectionChangedEventArgsConverter}" />
</core:EventTriggerBehavior>
</interactivity:Interaction.Behaviors>
</controls:SelectionBoundListView>
 
...
<!-- Multi Select Toggle Button -->
<Button
...
Command="{Binding BulkOperation.ToggleMultiSelectCommand, Source={StaticResource FilteredList}}"
Visibility="{Binding BulkOperation.ItemSelectionMode, Source={StaticResource FilteredList}, Converter={StaticResource EqualToVisConverter}, ConverterParameter=None}" />
 
</Grid>
</source>
</tab>
 
<tab name="Xamarin">
<source lang = "xml">
<Grid
xmlns:controls="clr-namespace:UBIK.CPL.Controls;assembly=UBIK.CPL"
xmlns:behaviors="clr-namespace:UBIK.CPL.Behaviors;assembly=UBIK.CPL">
<ContentView.Resources>
<ResourceDictionary>
<x:String x:Key="Expresssion">Item.Header.ToLower().Contains(&quot;1&quot;)==false</x:String>
<controls:SfDataSourceExt x:Key="FilteredList" Expression="{StaticResource Expresssion}" ItemsSource="{Binding Children.Items}" Unloaded="{Binding SkipFiltering}" />
</ResourceDictionary>
</ContentView.Resources>
 
...
<!-- Filtered List -->
<controls:SfListViewExt
...
ItemsSource="{Binding DisplayItems, Source={StaticResource FilteredList}}"
SelectionGesture="Tap"
SelectionMode="{Binding BulkOperation.ItemSelectionMode, Source={StaticResource FilteredList}, Converter={StaticResource SelectionModeConverter}}">
<controls:SfListViewExt.Behaviors>
<behaviors:EventHandlerBehavior EventName="SelectionChanged">
<behaviors:InvokeCommandAction Command="{Binding BulkOperation.ItemSelectionChangedCommand, Source={StaticResource FilteredList}}" Converter="{StaticResource SelectionChangedEventArgsConverter}" />
</behaviors:EventHandlerBehavior>
...
<behaviors:EventHandlerBehavior EventName="ItemHolding">
<behaviors:InvokeCommandAction Command="{Binding BulkOperation.ToggleMultiSelectCommand, Source={StaticResource FilteredList}}" />
</behaviors:EventHandlerBehavior>
</controls:SfListViewExt.Behaviors>
</controls:SfListViewExt>
 
...
<!-- Multi Select Panel -->
<ContentView
...
BindingContext="{StaticResource FilteredList}"
ControlTemplate="{StaticResource UBIKMultiSelectTemplate}"
IsVisible="{Binding BulkOperation.ItemSelectionMode, Converter={StaticResource EqualityToBool}, ConverterParameter=Multiple, FallbackValue=false, TargetNullValue=false}" />
 
</Grid>
</source>
</tab>
</tabs>
 
{{Hint|The critical part is that wherever the <code>BulkOperation</code> property is accessed, it must be accessed from the <code>FilteredList</code>, not the original unfiltered <code>Children.Items</code> collection. When all references have been updated, the only remaining reference to 'Children' should be in FilteredList, as the ItemsSource attribute.}}
 
[[Category:Client|Multi Select (UBIK Client)]]
[[Category:Version 4.3|Multi Select (UBIK Client)]]
[[Category:WinX|Mass Edit (UBIK WinX)]]
[[Category:XAML|Multi Select (UBIK Client)]]
[[Category:Xamarin|Multi Select (UBIK Client)]]
650
edits

Help improve this page!