我在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重叠。
答案 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)
}
}
};