xamarin网格布局没有显示任何数据

时间:2017-11-26 19:03:54

标签: c# listview xamarin xamarin.ios xamarin.forms

我在ListView中有一个Grid,并希望在每个listview项目中显示一个2列网格。

我不想在模型上修复它,因为我希望尽可能保持它的通用性,因为我的背面是提供" dynmaci数据结构" (JSON)

所以我认为在

背后的代码中执行此操作会更容易

XAML:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="Analytics.Views.AnlDataPage">
</ContentPage>

非常直接,因为魔法发生在幕后。

代码隐藏

public partial class AnlDataPage : ContentPage
{
    AnlDataModel _model;

    public AnlDataPage(WfDataCollection objectData)
    {
        InitializeComponent();
        BindingContext = _model = new AnlDataModel(objectData);
        Populate();
    }

    public void Populate()
    {

        var AnlDataTemplate = new DataTemplate(() =>
        {
            var grid = new Grid();
            grid.ColumnDefinitions = new ColumnDefinitionCollection
            {
                new ColumnDefinition {
                    Width = new GridLength(1, GridUnitType.Star)
                },
                new ColumnDefinition {
                    Width = new GridLength(1, GridUnitType.Star)
                }
            };



            if (_model.Columns != null)
            {
                int i = 0;
                foreach (WfDataColumn column in _model.Columns)
                {
                    grid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) });

                    Label columnLabel = new Label {
                        Text = _model.ObjectData.Translations[column.LangKey],
                    };
                    Label valueLabel = new Label
                    {
                        Text = "some value",
                    };
                    grid.Children.Add(columnLabel, 0, i);
                    grid.Children.Add(valueLabel, 1, i);

                    i++;
                }
            }                

            return new ViewCell { View = grid };
        });

        Content = new StackLayout
        {
            Margin = new Thickness(20),
            Children = {
            new ListView { ItemsSource = _model.Data, ItemTemplate = AnlDataTemplate, Margin = new Thickness(0, 20, 0, 0) }
            }
        };
    }
}

输出结果是显示列表视图,行的高度看起来很适合数据。

但listItem中没有显示任何内容。

如果我省略left的{​​{1}}和top,则标签全部显示但与c重叠。

1 个答案:

答案 0 :(得分:0)

对于遇到同样问题的任何人。

基本上。我最初的方法完全没问题。唯一的问题是,如果你的行高不均匀,你需要设置一个Xamarin.Forms.ListView.HasUnevenRows Property

女巫是我最初期待的其他东西。

   Content = new StackLayout
    {
        Margin = new Thickness(20),
        Children = {
            new ListView {
                HasUnevenRows = true,
                ItemsSource = _model.Data,
                ItemTemplate = AnlDataTemplate,
                Margin = new Thickness(0, 20, 0, 0)
            }
        }
    };