繁体   English   中英

xamarin forms 可绑定属性无法正常工作

[英]xamarin forms bindable property does not work properly

我正在尝试创建如下所示的自定义视图 我正在尝试将主页中的集合绑定到自定义视图

但在这里它没有正确绑定。

<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>

我的SummeryDetailModel喜欢

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

这里它没有将测试值绑定到 label。

我在这里错过了什么?

我只是弄清楚这一点,我犯了一个小错误。

我没有为StackLayout BindableLayout添加Itemtemplate DataTemplate

如下

<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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM