【问题标题】:xamarin forms bindable property does not work properlyxamarin 表单可绑定属性无法正常工作
【发布时间】:2020-05-06 04:46:11
【问题描述】:

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

但是这里没有正确绑定。

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

这里没有将 Test 值绑定到标签。

我错过了什么?

【问题讨论】:

  • 我假设因为列表没有这样的属性,它里面的元素有。但是您绑定到列表。

标签: c# xamarin.forms bindableproperty


【解决方案1】:

我只是想通了,我犯了一个小错误。

我没有为 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>

【讨论】:

    猜你喜欢
    • 2021-06-25
    • 1970-01-01
    • 2019-05-13
    • 1970-01-01
    • 2018-07-01
    • 1970-01-01
    • 2015-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多