2

我正在尝试在我的 Xamarin.Forms 项目中实现 MVVM。

这是我StackLayout的 x:Name

<StackLayout x:Name="approvalsStack"></StackLayout>

这就是我Children在这个中填充的方式StackLayout

StackLayout stack = new StackLayout();
                    Frame frame = new Frame { BorderColor = Color.LightGray };
                    frame.Content = new Label { Text = a.FullName + " (" + a.Decision + ")" + " " + a.DecisionDate.ToString() };
                    stack.Children.Add(frame);
                    approvalsStack.Children.Add(stack);

现在我被卡住了,如何使用 ViewModel/Binding 填充孩子。

4

2 回答 2

4

你不能那样做,正如你在这里看到的,Property Childrenin StackLayoutis not a Bindable property

但是,您可以通过实现可绑定属性来解决这个问题,该属性将具有一些ItemSource用于动态添加/删除项目的功能,或者您可以使用一些很棒的RepeaterViewXamarin.Forms 社区实现,我建议您这样做。

RepeaterView基本上是一个可绑定的StackLayout,您可以在其中动态填充项目。

我建议你看一下Glenn Versweyveld这个,如果你愿意的话,你可以在 google 或 github 上搜索更多其他的(但我强烈推荐你这个)

祝你编码好运!

于 2018-07-18T07:54:21.683 回答
2

找到解决方案!!

https://github.com/HoussemDellai/Xamarin-Forms-RepeaterView/blob/master/Repeater/Repeater/RepeaterView.cs

1-使用了 RepeaterView 的这个实现 2-向 Xaml 添加了命名空间

<local:RepeaterView x:Name="approvalsStack" ItemsSource="{Binding Approvals}">
                        <local:RepeaterView.ItemTemplate>
                            <DataTemplate>
                                <ViewCell>
                                    <StackLayout>
                                        <Grid>
                                            <Grid.ColumnDefinitions>
                                                <ColumnDefinition Width="*"/>
                                                <ColumnDefinition Width="*"/>
                                                <ColumnDefinition Width="*"/>
                                            </Grid.ColumnDefinitions>
                                            <Label Grid.Column="0" Text="{Binding FullName}"/>
                                            <Label Grid.Column="1" Text="{Binding Decision}"/>
                                            <Label Grid.Column="2" Text="{Binding DecisionDate}"/>
                                        </Grid>
                                        <StackLayout>
                                            <BoxView HeightRequest="1" Color="Gray" HorizontalOptions="FillAndExpand"/>
                                        </StackLayout>
                                    </StackLayout>
                                </ViewCell>
                            </DataTemplate>
                        </local:RepeaterView.ItemTemplate>
                    </local:RepeaterView>

并绑定转发器视图,然后用 ViewModel 填充它

于 2018-07-18T13:27:15.580 回答