1+ using CommunityToolkit . Mvvm . ComponentModel ;
2+ using Microsoft . Maui . Adapters ;
3+ using System . Collections . ObjectModel ;
4+
5+ namespace VirtualListViewSample ;
6+
7+ public partial class BindableSelectedItemViewModel : ObservableObject
8+ {
9+ public BindableSelectedItemViewModel ( IDispatcher dispatcher )
10+ {
11+ Dispatcher = dispatcher ;
12+
13+ for ( int i = 0 ; i < 10 ; i ++ )
14+ {
15+ Items . Add ( $ "Item: { i } ") ;
16+ }
17+
18+ Adapter = new ObservableCollectionAdapter < string > ( Items ) ;
19+ }
20+
21+ protected IDispatcher Dispatcher { get ; }
22+
23+ [ ObservableProperty ]
24+ ItemPosition ? selectedItem ;
25+
26+ [ ObservableProperty ]
27+ ObservableCollectionAdapter < string > adapter ;
28+
29+ public ObservableCollection < string > Items = new ( ) ;
30+
31+ public void OnAppearing ( )
32+ {
33+ Task . Delay ( 1000 ) . ContinueWith ( t =>
34+ {
35+ Dispatcher . Dispatch ( ( ) =>
36+ {
37+ Items . Add ( "Item 11" ) ;
38+ Items . Add ( "Item 12" ) ;
39+ } ) ;
40+ } ) ;
41+ }
42+ }
43+
44+ public partial class BindableSelectedItemPage : ContentPage
45+ {
46+ public BindableSelectedItemPage ( )
47+ {
48+ InitializeComponent ( ) ;
49+
50+ ViewModel = new BindableSelectedItemViewModel ( Dispatcher ) ;
51+
52+ BindingContext = ViewModel ;
53+ }
54+
55+ public readonly BindableSelectedItemViewModel ViewModel ;
56+
57+ private void Button_Clicked ( object sender , EventArgs e )
58+ {
59+ if ( ! string . IsNullOrEmpty ( entryItem . Text ) )
60+ {
61+ var index = ViewModel . Items . IndexOf ( entryItem . Text ) ;
62+
63+ if ( index == ViewModel . SelectedItem ? . ItemIndex )
64+ ViewModel . SelectedItem = null ;
65+ else if ( index >= 0 )
66+ ViewModel . SelectedItem = new ItemPosition ( 0 , index ) ;
67+ }
68+ }
69+
70+ private void vlv_SelectedItemsChanged ( object sender , SelectedItemsChangedEventArgs e )
71+ {
72+ var selection = string . Join ( ", " , e . NewSelection . Select ( i => i . ItemIndex ) ) ;
73+ System . Diagnostics . Debug . WriteLine ( $ "SelectedItemsChanged: { selection } ") ;
74+ }
75+ }
0 commit comments