Как я могу добавить 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.