Привязываемое свойство форм xamarin не работает должным образом - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь создать настраиваемый вид, как показано ниже, здесь я пытаюсь привязать коллекцию с главной страницы к настраиваемому виду

, но здесь он не привязан должным образом.

<ContentView.Content>
        <Grid
            x:Name="Layout"
            HorizontalOptions="FillAndExpand"
            VerticalOptions="FillAndExpand">

            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>

            <StackLayout
                Grid.Row="0"
                BackgroundColor="#E0E0E0"
                Padding="20,10">
                <Label Text="{Binding Source={x:Reference ExpandableContentView}, Path=Header}"/>
            </StackLayout>

            <StackLayout
                Grid.Row="1"
                BindableLayout.ItemsSource="{Binding Source={x:Reference ExpandableContentView}, Path=SummeryList}">

                <Label Text="{Binding Test}"/>
            </StackLayout>

        </Grid>
    </ContentView.Content>

файл xmal.cs

public partial class ExpandableView : ContentView
    {
        public static readonly BindableProperty HeaderProperty = BindableProperty.Create(
            nameof(Header),
            typeof(string),
            typeof(ExpandableView),
            default(string));

        public static readonly BindableProperty SummeryListProperty = BindableProperty.Create(
            nameof(SummeryList),
            typeof(ObservableCollection<SummeryDetailModel>),
            typeof(ExpandableView),
            propertyChanged: CollectionChanged);

        private static void CollectionChanged(BindableObject bindable, object oldValue, object newValue)
        {
        }

        public ExpandableView()
        {
            InitializeComponent();
        }

        public string Header
        {
            get => (string)GetValue(HeaderProperty);
            set => SetValue(HeaderProperty, value);
        }

        public ObservableCollection<SummeryDetailModel> SummeryList
        {
            get => (ObservableCollection<SummeryDetailModel>)GetValue(SummeryListProperty);
            set => SetValue(SummeryListProperty, value);
        }

Я выполняю привязку на MainPage, как показано ниже

<commonviews:ExpandableView
            Header="Shipment Details"
            SummeryList="{Binding SummeryCollection}">
        </commonviews:ExpandableView>

My SummeryDetailModel как

public class SummeryDetailModel
    {
        public string Test { get; set; }
    }

здесь не привязывает значение Test к метке.

что-нибудь, что я здесь пропустил?

1 Ответ

0 голосов
/ 06 мая 2020

Я просто понял это, я сделал небольшую ошибку.

Я не добавил Itemtemplate DataTemplate для StackLayout BindableLayout

это выглядит следующим образом

<StackLayout
                Grid.Row="1"
                Padding="20,10"
                Spacing="15"
                BindableLayout.ItemsSource="{Binding Source={x:Reference ExpandableContentView}, Path=SummeryList}">
                <BindableLayout.ItemTemplate>
                    <DataTemplate>
                        <StackLayout
                            Spacing="10">
                            <Label
                                Text="{Binding Title}"
                                FontFamily="{StaticResource LatoRegular}"
                                FontSize="{StaticResource FontSize14}"
                                TextColor="{StaticResource PlaceholderColor}"/>

                            <Label Text="{Binding Detail}"
                                   FontFamily="{StaticResource LatoRegular}"
                                   FontSize="{StaticResource FontSize14}"
                                   TextColor="{StaticResource PrimaryText}"/>

                        </StackLayout>
                    </DataTemplate>
                </BindableLayout.ItemTemplate>
            </StackLayout>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...