#xamarin.forms #binding #collectionview #itemssource
Вопрос:
Есть ли способ получить сам контекст привязки в перечисляемом шаблоне?
this.CollectionView.ItemTemplate = new DataTemplate(() =>
{
var view = new SubView();
view.SetBinding(SubView.SourceProperty, new Binding()
{
Source = ??? // <- here
});
return view;
};
Примечание:
Path = "."
отлично работает на Android. но в iOS источник дублируется.
Я уже проверил, что в CollectionView нет дубликатов.Источник предметов.
Комментарии:
1. Согласно вашему коду, мне не ясно, с какой проблемой вы столкнулись? Если вы хотите использовать привязку collectionview по коду, вы можете посмотреть: xamarin.forms collectionview
2. Спасибо за ответ, Черри Бу. Действие в аргументе конструктора DataTemplate выполнялось столько раз, сколько элементов. Поэтому я представил себе, что будет способ передать сам элемент в качестве аргумента для Действия.
3. Зачем ты это делаешь? Для просмотра коллекции. Табличка, которую я обычно использую, как этот документ , не уверена, хотите ли вы использовать относительную привязку .
Ответ №1:
Я новичок на платформе и надеюсь, что смогу помочь. Я понимаю, что вы хотите получить связывающий контекст каждого элемента в списке. Если я правильно интерпретирую, то это то, что вы можете сделать:
public partial class NotificationsPage : ContentPageBase
{
public NotificationsPage()
{
InitializeComponent();
CollectionView.ItemTemplate = new DataTemplate(() =>
{
return new Item();
});
}
}
public class Item : ContentView
{
protected override void OnBindingContextChanged()
{
base.OnBindingContextChanged();
if (BindingContext is ItemModel item)
{
var name = item.Name;
}
}
}
public class ItemModel
{
public string Name { get; set; }
}
DataTemplate не содержит доступного BindingContext, BindingContext передается элементу, содержащему DataTemplate.
Комментарии:
1. Спасибо за ответ, Алексдев. Я понял, что это невозможно.