Как я могу добавить SelectionChanged в представление коллекции из кода?

#c# #xamarin #xamarin.forms #xamarin.forms.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 amp;amp; x.Pasto == Pasto_Array[i]),
                       }
                           //.SelectionChanged  =CheckDuplicazioni_SelectionChanged;
                   }
                 }
 

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

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

Комментарии:

1. c# не позволяет назначать обработчики событий в инициализаторах свойств. Либо используйте команду SelectionChanged, либо назначьте свой CollectionView переменной и назначьте обработчик SelectionChange после инициализатора свойства

Ответ №1:

Вы можете сделать это, сохранив 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 amp;amp; x.Pasto == Pasto_Array[i]),
};

collectionView.SelectionChanged  = CheckDuplicazioni_SelectionChanged;

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