在 ViewModel 中使用绑定在 StackLayout 中添加子项,Xamarin.Forms
Adding Children in StackLayout using Binding in ViewModel, Xamarin.Forms
我正在尝试在我的 Xamarin.Forms 项目中实施 MVVM。
这是我的 StackLayout
和 x:Name
<StackLayout x:Name="approvalsStack"></StackLayout>
这就是我在 StackLayout
中填充 Children
的方式
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.
填充子项
你不能那样做,如你所见here, Property Children
in StackLayout
is not a Bindable property。
但是你可以解决这个问题,方法是通过实现 bindable-属性 来定制一个 属性,这将有一些 ItemSource
用于动态 adding/removing它的项目,或者你可以只使用 RepeaterView
的一些很棒的社区实现来实现 Xamarin.Forms,我建议你这样做。
RepeaterView
基本上是一个 Bindable StackLayout
,您可以在其中动态填充项目。
我建议你看看这个here from Glenn Versweyveld,如果你想你可以在google或github上搜索更多的(但我强烈推荐你这个).
祝您编码顺利!
找到解决方案!!
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
填充它
我正在尝试在我的 Xamarin.Forms 项目中实施 MVVM。
这是我的 StackLayout
和 x:Name
<StackLayout x:Name="approvalsStack"></StackLayout>
这就是我在 StackLayout
Children
的方式
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.
填充子项你不能那样做,如你所见here, Property Children
in StackLayout
is not a Bindable property。
但是你可以解决这个问题,方法是通过实现 bindable-属性 来定制一个 属性,这将有一些 ItemSource
用于动态 adding/removing它的项目,或者你可以只使用 RepeaterView
的一些很棒的社区实现来实现 Xamarin.Forms,我建议你这样做。
RepeaterView
基本上是一个 Bindable StackLayout
,您可以在其中动态填充项目。
我建议你看看这个here from Glenn Versweyveld,如果你想你可以在google或github上搜索更多的(但我强烈推荐你这个).
祝您编码顺利!
找到解决方案!!
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
填充它