Xamarin表单ViewCell不显示带有列表的绑定数据,但与元组一起使用

时间:2017-02-18 01:27:05

标签: c# listview data-binding xamarin.forms binding-context

当我尝试连接Xamarin Forms中的视单元以显示来自BindingContext的数据时出现奇怪的行为。

基本上我填充一个对象来容纳3个图像(除了其他东西) - 我是Xamarin的新手并且想我想弄清楚如何构建一个Instagram式的照片库,我有3个每行可点击的图像,使UI快速响应,没有滞后和内存问题。探索使用listview执行此操作可能因此我可以获得viewcell重用功能?? ...

enter image description here

无论如何,我通过BindingContext将此对象传递给自定义视图单元格。使用元组时,图像显示出一些东西。但是,如果我使用列表项,它就不会。

我不明白为什么它会显示为一个而不显示另一个 - 元组和列表同时填充并保存信息?

public class ExploreVCell : ViewCell
{
    public ExploreVCell()
    {
        Image image1 = new Image();
        Image image2 = new Image();
        Image image3 = new Image();

       // List<StylePost> list;

        Label lbl = new Label ();

        Grid grid = new Grid
        {
            Padding = new Thickness(10),
            RowDefinitions = { new RowDefinition { Height = GridLength.Star } },
            ColumnDefinitions = {
                new ColumnDefinition { Width = GridLength.Star },
                new ColumnDefinition { Width = GridLength.Star },
                new ColumnDefinition { Width = GridLength.Star }
            },
            BackgroundColor=Color.Blue
        };

        grid.Children.Add(image1, 0, 0);
        grid.Children.Add(image2, 1, 0);
        grid.Children.Add(image3, 2, 0);

        View = grid;

        image1.SetBinding<ListViewRow>(Image.SourceProperty, i => i.MyTuple.Item1.ImageUrl);
        image2.SetBinding<ListViewRow>(Image.SourceProperty, i => i.MyTuple.Item2.ImageUrl);
        image3.SetBinding<ListViewRow>(Image.SourceProperty, i => i.MyTuple.Item3.ImageUrl);

以上是有效的,但是当我将图像绑定换成通过以下设置进行设置时

        // doesnt work with these lines - weird
        image1.SetBinding<ListViewRow>(Image.SourceProperty, i => i.RowData[0].ImageUrl);
        image2.SetBinding<ListViewRow>(Image.SourceProperty, i => i.RowData[1].ImageUrl);
        image3.SetBinding<ListViewRow>(Image.SourceProperty, i => i.RowData[2].ImageUrl);

这是在我将数据填入其中后绑定到视单元的类。正如您所看到的,我使用的是ObservableCollection,但它与List的行为相同......只有一个元组似乎有效。它现在很好但是如果我需要使用枚举方法怎么办:(

public class ListViewRow
{
    public ListViewRow(StylePost p, StylePost q, StylePost r)
    {
        MyTuple = new Tuple<StylePost, StylePost, StylePost>(p, q, r);
        RowData = new ObservableCollection<StylePost>();
        RowData.Add(p);
        RowData.Add(q);
        RowData.Add(r);

    }
    public Tuple<StylePost, StylePost, StylePost> MyTuple { get; set; }
    public ObservableCollection<StylePost> RowData { get; set; }

}

0 个答案:

没有答案