我为项ListView
设置模板并分配列表项
listView.ItemTemplate = new DataTemplate(typeof(CustomVeggieCell));
listView.ItemsSource = posts;
如何在currentItem
中获取CustomVeggieCell
元素:
CustomVeggieCell.class:
public class CustomVeggieCell : ViewCell
{
public CustomVeggieCell(){
// for example int count = currentItem.Images.Count;
var postImage = new Image
{
Aspect = Aspect.AspectFill,
HorizontalOptions = LayoutOptions.FillAndExpand,
VerticalOptions = LayoutOptions.FillAndExpand
};
postImage.SetBinding(Image.SourceProperty, new Binding("Images[0]"));
var postImage = new Image
{
Aspect = Aspect.AspectFill,
HorizontalOptions = LayoutOptions.FillAndExpand,
VerticalOptions = LayoutOptions.FillAndExpand
};
postImage.SetBinding(Image.SourceProperty, new Binding("Images[1]"));
}
}
我想在Images
中获得ItemTemplate
的金额。 Images
只是一个字符串列表。
P.S。我通过绑定获得ItemTemplate
中的所有值。
答案 0 :(得分:2)
要获取ItemTemplate
中的当前项目,您只需要像CustomVeggieCell
那样引用BindContext
string imageString = (string)BindingContext; //Instead of string, you would put what ever type of object is in your 'posts' collection
:
CustomVeggieCell
话虽如此,你的代码对我来说并不完全有意义。如果您的ListView
位于new Binding("Images[1]")
,则不需要通过硬编码项目的索引来访问项目列表,就像您在此处一样:
ListView
foreach
基本上应该通过所有项目posts
为您做。除非List<string>
包含ViewCell
的属性。
编辑:现在我对这个问题有了更好的了解。您可以在ViewCell
上创建一个新的可绑定属性,并在OnPropertyChanged参数中指定一个方法,将图像添加到布局中,然后将布局添加到public class CustomVeggieCell : ViewCell
{
public List<ImageSource> Images {
get { return (ImageSource)GetValue(ImagesProperty); }
set { SetValue(ImagesProperty, value); }
}
public static readonly BindableProperty ImagesProperty = BindableProperty.Create("Images", typeof(List<ImageSource>), typeof(CustomVeggieCell), null, BindingMode.TwoWay, null, ImageCollectionChanged);
private StackLayout _rootStack;
public InputFieldContentView() {
_rootStack = new StackLayout {
Children = //Some other controls here if needed
};
View = _rootStack;
}
private static void ImageCollectionChanged(BindableObject bindable, object oldValue, object newValue) {
List<ImageSource> imageCollection = (List<ImageSource>)newValue;
foreach(ImageSource imageSource in imageCollection) {
(CustomVeggieCell)bindable)._rootStack.Children.Add(new Image { Source = imageSource });
}
}
}
。我从未尝试过这样的事情,所以这一切都可能根本不起作用。
类似的东西:
posts.Images
或类似的东西。然后,您将top
绑定到新的可绑定属性。我刚刚在文本框中编写了这段代码,并且之前没有测试过这样的代码,但如果遇到问题,请告诉我。
答案 1 :(得分:0)
在CustomVeggieCell
的构造函数中放置最小代码。例如
content = new StackLayout();
View = content;
(假设您在CustomVeggieCell
的字段中声明了“私有StackLayout内容”)
在此类中,重写OnBindingContextChanged
。此时,this.BindingContext
包含当前项目。现在,您可以根据刚刚插入ListView
的数据来调整基本stackLayout的内容。