在Stackedlayout绑定内部的Stacklayout可见

时间:2019-11-08 17:02:02

标签: xaml xamarin xamarin.forms

我有一个xaml视图,它是一个简单的列表视图,在单元格中有几个stackedlayouts以及我的模型的一些简单绑定:

    <?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:directory="clr-namespace:Directory;assembly=Directory"
             xmlns:d="http://xamarin.com/schemas/2014/forms/design"
             xmlns:models="clr-namespace:Directory.Models"
             xmlns:controls="clr-namespace:ImageCircle.Forms.Plugin.Abstractions;assembly=ImageCircle.Forms.Plugin.Abstractions"
             xmlns:viewModels="clr-namespace:Directory.ViewModels;assembly=Directory"
             x:Class="Directory.Views.DirectoryList">
    <ContentPage.BindingContext>
        <viewModels:MasterViewModel/>
    </ContentPage.BindingContext>
    <ListView Margin="0,10"  
              ItemTapped="ListViewItem_Tabbed"  
              ItemsSource="{Binding PeopleCollectionGrouped}"  
              IsGroupingEnabled="True"
              GroupDisplayBinding="{Binding Key}"
              GroupShortNameBinding="{Binding Key}"
              HasUnevenRows="True" 
              BackgroundColor="White">
        <ListView.ItemTemplate>
            <DataTemplate x:DataType="models:People">
                <ViewCell>
                    <Grid
                        Padding="10"
                        ColumnSpacing="10"
                        RowSpacing="10">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto" />
                            <ColumnDefinition Width="*" />
                        </Grid.ColumnDefinitions>
                        <controls:CircleImage
                            Aspect="AspectFill"
                            BorderColor="Black"
                            BorderThickness="3"
                            HeightRequest="66"
                            HorizontalOptions="CenterAndExpand"
                            Source="{Binding PhotoUrl}"
                            VerticalOptions="CenterAndExpand"
                            WidthRequest="66" />
                        <StackLayout Grid.Column="1" VerticalOptions="Center">
                            <Label Text="{Binding FullName}" />
                            <Label Text="{Binding Location}" />
                            <StackLayout IsVisible="{Binding IsVisible}"  
                                         Orientation="Horizontal"  
                                         Margin="0,0,80,0">
                                <Button Text="Place Order"  
                                        WidthRequest="110"  
                                        FontSize="15"  
                                        BackgroundColor="Chocolate"  
                                        TextColor="White"/>
                            </StackLayout>
                        </StackLayout>
                    </Grid>
                </ViewCell>
            </DataTemplate>
        </ListView.ItemTemplate>

所有绑定均与IsVisible绑定分开工作,后者导致应用程序崩溃:

System.InvalidProgramException: Invalid IL code

如果我更改Xaml以便不绑定IsVisible属性,而仅将其设置为“ True”,则它将编译并加载。

我不知道为什么由于模型中的其他值已正确绑定而无法正常工作。

这是人员模型,“ PeopleCollectionGrouped”属于:

public class People
{
    [JsonProperty("photo_url")]
    public string PhotoUrl { get; set; }

    [JsonProperty("location")]
    public string Location { get; set; }

    [JsonProperty("id")]
    public string Id { get; set; }

    [JsonProperty("first_name")]
    public string FirstName { get; set; }

    [JsonProperty("middle_name")]
    public string MiddleName { get; set; }

    [JsonProperty("last_name")]
    public string LastName { get; set; }

    public string FullName => $"{FirstName} {LastName}";

    public string NameSort
    {
        get
        {
            if (string.IsNullOrWhiteSpace(FullName) || FullName.Length == 0)
            {
                return "?";
            }

            return FullName[0].ToString().ToUpper();
        }
    }


    public bool IsVisible { get; set; }
}

如果任何人都可以发现我出了错,那将会有所帮助

0 个答案:

没有答案