Как я могу добавить SelectionChanged в CollectionView из кода?

Я хотел бы вызвать функцию, когда была нажата ячейка представления коллекции (созданная в cs).

Вот код:

      new StackLayout { Orientation = StackOrientation.Horizontal,
                  HorizontalOptions = LayoutOptions.FillAndExpand,
                  VerticalOptions = LayoutOptions.FillAndExpand,
                  HeightRequest = 200,
                  Children = {
                       new CollectionView {
                           HorizontalOptions = LayoutOptions.FillAndExpand,
                           SelectionMode = SelectionMode.Single,
                           ItemTemplate = MainPage.cv.ItemTemplate,
                           ItemsLayout = MainPage.cv.ItemsLayout,
                           ItemsSource = MainPage.jsonList.Where(x => x.Giorno == MainPage.day && x.Pasto == Pasto_Array[i]),
                       }
                           //.SelectionChanged +=CheckDuplicazioni_SelectionChanged;
                   }
                 }

Как видите, я пытался использовать закомментированный код, но это не сработало. В файле XAML я использовал функцию SelectionChanged, и она сработала, почему в cs id нет?

Жду ваших отзывов, спасибо.

2 ответа

Решение

Вы можете сделать это, сохранив CollectionView экземпляр в переменной

      var collectionView = new CollectionView()
            {
                HorizontalOptions = LayoutOptions.FillAndExpand,
                SelectionMode = SelectionMode.Single,
                ItemTemplate = MainPage.cv.ItemTemplate,
                ItemsLayout = MainPage.cv.ItemsLayout,
                ItemsSource = MainPage.jsonList.Where(x => x.Giorno == MainPage.day && x.Pasto == Pasto_Array[i]),
            };

            collectionView.SelectionChanged += CheckDuplicazioni_SelectionChanged;

            new StackLayout
            {
                Orientation = StackOrientation.Horizontal,
                HorizontalOptions = LayoutOptions.FillAndExpand,
                VerticalOptions = LayoutOptions.FillAndExpand,
                HeightRequest = 200,
                Children = {
                        collectionView
                   }
            };

К сожалению, подписка на события не поддерживается в инициализаторах объектов. правильный способ сделать это описан в ответе @Cfun.

Другие вопросы по тегам