gpt4 book ai didi

listview - 如何在 Xamarin Forms 中获取 ItemTemplate 中的当前项目

转载 作者:行者123 更新时间:2023-12-03 06:37:36 24 4
gpt4 key购买 nike

我为项目ListView设置模板并分配列表项

listView.ItemTemplate = new DataTemplate(typeof(CustomVeggieCell));  
listView.ItemsSource = posts;

如何在 CustomVeggieCell 中获取 currentItem 元素:

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]"));
}
}

我想获取 ItemTemplate 中的Images 数量。 Images 只是一个字符串列表。

附: ItemTemplate 中的所有值都是通过绑定(bind)获得的。

最佳答案

获取 ItemTemplate 中的当前项目您只需要引用 CustomVeggieCellBindContext像这样:

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 上创建一个新的可绑定(bind)属性。并在 OnPropertyChanged 参数中指定一个方法,将图像添加到布局,然后将布局添加到您的 ViewCell 。我从来没有尝试过这样的事情,所以这一切可能根本不起作用。

类似于:

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 });
}
}
}

或者类似的东西。然后你将绑定(bind)你的 posts.Images到你的新的可绑定(bind)属性。我刚才再次在文本框中编写了该代码,之前没有测试过类似的内容,但如果您遇到问题,请告诉我。

关于listview - 如何在 Xamarin Forms 中获取 ItemTemplate 中的当前项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38694970/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com