C# Xamarin动态网格布局

C# Xamarin动态网格布局,c#,xaml,xamarin,xamarin.forms,C#,Xaml,Xamarin,Xamarin.forms,我有一个对象集合,它有一个类似“ValueType”的属性,基于这个属性我调用一个DataTemplateSelector类,该类将返回要为该对象显示的控件类型 <control:ControlDataTemplateSelector x:Key="personDataTemplateSelector" RangeTemplate="{StaticResource rangeControl}" EnumTemplate="{S

我有一个对象集合,它有一个类似“ValueType”的属性,基于这个属性我调用一个DataTemplateSelector类,该类将返回要为该对象显示的控件类型

<control:ControlDataTemplateSelector x:Key="personDataTemplateSelector"
                RangeTemplate="{StaticResource rangeControl}"
                EnumTemplate="{StaticResource pickControl}"
                DateTemplate="{StaticResource dateControl}"/>

<DataTemplate x:Key="rangeControl">
                <ViewCell>
                    <Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto"/>
                            <RowDefinition Height="Auto" />
                        </Grid.RowDefinitions>
                        <control:ScreenLabel   Grid.Row="0" Grid.Column="{Binding Path=SortOrder, Converter={StaticResource sortOrderToColIndexConverter}}"  Text="{Binding Path=TraitDescription}" />
                        <Entry Grid.Row="1" Grid.Column="{Binding Path=SortOrder, Converter={StaticResource sortOrderToColIndexConverter}}"   />
                    </Grid>
                </ViewCell>
            </DataTemplate>
            <DataTemplate x:Key="dateControl">
                <ViewCell>
                    <Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto"/>
                            <RowDefinition Height="Auto" />
                        </Grid.RowDefinitions>
                        <control:ScreenLabel   Grid.Row="0" Grid.Column="{Binding Path=SortOrder, Converter={StaticResource sortOrderToColIndexConverter}}" Text="{Binding Path=TraitDescription}" />
                        <DatePicker Grid.Row="1" Grid.Column="{Binding Path=SortOrder, Converter={StaticResource sortOrderToColIndexConverter}}"></DatePicker>
                    </Grid>
                </ViewCell>
            </DataTemplate>
            <DataTemplate x:Key="pickControl">
                <ViewCell>
                    <Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto"/>
                            <RowDefinition Height="Auto" />
                        </Grid.RowDefinitions>
                        <control:ScreenLabel   Grid.Row="0" Grid.Column="{Binding Path=SortOrder, Converter={StaticResource sortOrderToColIndexConverter}}"  Text="{Binding Path=TraitDescription}" />
                        <Picker Grid.Row="1" Grid.Column="{Binding Path=SortOrder, Converter={StaticResource sortOrderToColIndexConverter}}"  />
                    </Grid>
                </ViewCell>
            </DataTemplate>

我在用两列格式以网格显示这些对象时遇到问题,例如,如果集合中有9个对象需要显示一个表格视图,其中4行各有2列,第5行有一列

用我目前的代码,我得到了一个之字形的布局。但我需要一些建议


我正在寻找需要在iOS和Droid中工作的解决方案,我会在ViewCell中使用StackLayouts而不是网格。 你可以做:

        <StackLayout VerticalOptions="FillAndExpand" >
            <control:ScreenLabel Text="{Binding Path=TraitDescription}" />
            <Entry />
        </StackLayout>


你确定你的绑定恢复正常了吗?我还没有在属性上看到逗号分隔的标记扩展设置

任何寻找答案的人,我们都使用流列表视图控件来解决它。它提供了并排查看的选项

如果我使用堆栈布局,如何在一行中定位两列将其添加到堆栈布局:Orientation=“Horizontal”请详细解释解决方案,以便其他人更容易理解