Jump to: navigation, search

Changes


Multi Select (UBIK Client)

2,242 bytes added, 15:18, 13 January 2023
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.
'''UNDER CONSTRUCTION'''
<tab name="UWP">
<source lang = "xml">
<StackPanel Grid xmlns:cv="using:UBIK.WinX.UI.CollectionView" xmlns:ctrlscontrols="using:UBIK.WinX.Controls" xmlns:interactivity="using:Microsoft.Xaml.Interactivity" xmlns:core="using:Microsoft.Xaml.Interactions.Core"> <ctrls:EvalExpressionGrid.Resources> <x:String x:NameKey="EvaluatorFilterExpression">Item.Header.ToLower().Contains(&quot;1&quot;)==true</x:String> Context <cv:ListCollectionView x:Key="FilteredList" Expression="{StaticResource FilterExpression}" ItemsSource="{BindingChildren.Items}"/> </Grid.Resources>  ... <!-- Multi Select Panel --> <ContentControl Expression... ContentTemplate="Context.Values{Binding TemplateService[&quot;LK_OFFLINE&quot;UBIKMultiSelectPanel]!}" DataContext=null || Context"{StaticResource FilteredList}" Visibility="{Binding BulkOperation.Values[&quot;GUIDREF&quot;]!ItemSelectionMode, Source=null{StaticResource FilteredList}, Converter={StaticResource EqualToVisConverter}, ConverterParameter=Multiple, FallbackValue=Collapsed, TargetNullValue=Collapsed}" > </ContentControl ... <TextBlock!-- Filtered List --> <controls:SelectionBoundListView ForegroundIsItemClickEnabled="WhiteFalse" TextItemsSource="Some Text{StaticResource FilteredList}" VisibilitySelectionMode="{Binding ElementNameBulkOperation.ItemSelectionMode, Source=Evaluator{StaticResource FilteredList}, PathConverter=Result{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 BoolToVisConverterEqualToVisConverter}, ConverterParameter=None}" />  </StackPanelGrid>
</source>
The TextBlock should critical part is that wherever the <code>BulkOperation</code> property is accessed, it must be visible as long as at least one of accessed from the <code>FilteredList</code>, not the context object's two named properties has a valueoriginal unfiltered <code>Children.Items</code> collection.
</tab>