Как я могу связать наблюдаемую коллекцию с flexlayout в xamarin? - PullRequest
2 голосов
/ 03 февраля 2020

Мне нужно привязать представление ObservableCollection к FlexLayout (потому что мне нужен пользовательский внешний вид). Когда я связываю элементы с CollectionView, они не выглядят так же, как и я, когда использую сетку непосредственно внутри FlexLayout, например:

Это работает, как и ожидалось, но без привязки, конечно.

<FlexLayout Grid.Row="5"
            Grid.Column="0"
            Margin="10,15,10,5"
            HorizontalOptions="FillAndExpand"
            VerticalOptions="StartAndExpand">
    <Grid Margin="0,0,0,6"
          HeightRequest="20">
        <Frame Padding="2"
               BackgroundColor="#f1f1f1"
               CornerRadius="5">
            <Label Grid.Row="0"
                   Grid.Column="1"
                   FontSize="11"
                   Text="some text"
                   TextColor="DarkGray" />
        </Frame>
    </Grid>
</FlexLayout>

Здесь все в порядке, но внешний вид похож на ListView:

в коде:

xEspecialidades.ItemsSource = StringCollection;

в XAML:

<FlexLayout Grid.Row="5"
            Grid.Column="0"
            Margin="10,15,10,5"
            HorizontalOptions="FillAndExpand"
            VerticalOptions="StartAndExpand">
    <CollectionView x:Name="xEspecialidades"
                    x:FieldModifier="public static"
                    HorizontalOptions="FillAndExpand"
                    HorizontalScrollBarVisibility="Never"
                    VerticalOptions="StartAndExpand"
                    VerticalScrollBarVisibility="Never">
        <CollectionView.ItemTemplate>
            <DataTemplate>
                <Grid Margin="0,0,0,6"
                      HeightRequest="20">
                    <Frame Padding="2"
                           BackgroundColor="#f1f1f1"
                           CornerRadius="5">
                        <Label Grid.Row="0"
                               Grid.Column="1"
                               FontSize="11"
                               Text="{Binding .}"
                               TextColor="DarkGray" />
                    </Frame>
                </Grid>
            </DataTemplate>
        </CollectionView.ItemTemplate>
    </CollectionView>
</FlexLayout>

Я нашел эту тему https://github.com/xamarin/Xamarin.Forms/issues/8234, но не смог заставить ее работать. Visual Studio постоянно говорит, что FlexItemsLayout не найден. Есть ли способ сделать то, что я хочу?

1 Ответ

2 голосов
/ 03 февраля 2020

Работаем, используя код ниже:

<FlexLayout x:Name="xEspecialidades"
            BindableLayout.ItemsSource="{Binding especialidades}"
            HorizontalOptions="FillAndExpand"
            VerticalOptions="StartAndExpand">
    <BindableLayout.ItemTemplate>
        <DataTemplate>
            <Grid Margin="0,0,0,6"
                  HeightRequest="20"
                  HorizontalOptions="StartAndExpand">
                <Frame Padding="2"
                       BackgroundColor="#f1f1f1"
                       CornerRadius="5"
                       HorizontalOptions="StartAndExpand">
                    <Label Grid.Row="0"
                           Grid.Column="1"
                           FontSize="11"
                           HorizontalOptions="StartAndExpand"
                           Text="{Binding .}"
                           TextColor="DarkGray" />
                </Frame>
            </Grid>
        </DataTemplate>
    </BindableLayout.ItemTemplate>
</FlexLayout>
...