0

我已经在我的 xamarin.form 应用程序中实现了 Skeleton 插件。它在我的列表视图页面中运行良好。然后我在我的 listView 项目详细信息中尝试它,动画和骨架背景颜色不起作用。该功能工作正常,在我的构建中没有错误。

这是我尝试过的:

我的xml布局

<ScrollView BackgroundColor="White">
        <StackLayout
               Margin="15"
               extension:Skeleton.IsParent="True"
               extension:Skeleton.IsBusy="{Binding IsLoadBusy}"
               extension:Skeleton.BackgroundColor="{StaticResource GrayColor}"
               extension:Skeleton.Animation="Fade"
               extension:Skeleton.AnimationInterval="600">
            <Image
                   x:Name="ImgSelfie"
                   HeightRequest="200" WidthRequest="200" BackgroundColor="White"
                   Source="selfie"
                   extension:Skeleton.IsBusy="{Binding IsLoadBusy}"
                   extension:Skeleton.Animation="Fade"
                   extension:Skeleton.BackgroundColor="{StaticResource DarkGrayColor}"/>
            <Label Text="Location :" FontAttributes="Bold"/>
            <Editor
                   Text="{Binding Attend.AddressDetail}" x:Name="EdtLocation" IsEnabled="False" AutoSize="TextChanges"
                   extension:Skeleton.IsBusy="{Binding IsLoadBusy}"
                   extension:Skeleton.Animation="Fade"
                   extension:Skeleton.BackgroundColor="{StaticResource DarkGrayColor}"/>

            <Label Text="Time :" FontAttributes="Bold"/>
            <Entry
                   Text="{Binding Attend.Created}" x:Name="EntTime" IsEnabled="False"
                   extension:Skeleton.IsBusy="{Binding IsLoadBusy}"
                   extension:Skeleton.Animation="Fade"
                   extension:Skeleton.BackgroundColor="{StaticResource DarkGrayColor}" />

            <Label Text="Action :" FontAttributes="Bold"/>
            <Label
                   Text="{Binding Attend.Activity}" x:Name="LblAction" FontSize="Medium" TextColor="Black"
                   extension:Skeleton.IsBusy="{Binding IsLoadBusy}"
                   extension:Skeleton.Animation="Fade"
                   extension:Skeleton.BackgroundColor="{StaticResource DarkGrayColor}"/>

            <Label Text="Noted :" FontAttributes="Bold"/>
            <Editor
                   Text="{Binding Attend.Note}" x:Name="EntNote" IsEnabled="False" AutoSize="TextChanges"
                   extension:Skeleton.IsBusy="{Binding IsLoadBusy}"
                   extension:Skeleton.Animation="Fade"
                   extension:Skeleton.BackgroundColor="{StaticResource DarkGrayColor}"/>

            <StackLayout VerticalOptions="EndAndExpand">
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*"/>
                    </Grid.ColumnDefinitions>
                    <material:MaterialButton
                   mvx:Bi.nd="Command OnCancelButtonCommand" Text="Confirm"
                   ButtonType="Outlined" BorderColor="Black" BackgroundColor="White"
                   TextColor="Black" PressedBackgroundColor="Gray" BorderWidth="2" WidthRequest="25" Padding="15"/>
                </Grid>
            </StackLayout>
        </StackLayout>
    </ScrollView>

视图模型

    public async Task PerformShimmerAsyncTask(string id)
    {
        this.Attend = new Attendance
        {
            //Image = null,
            AddressDetail = "x",
            Created = DateTime.Now,
            Activity = "x",
            Note = "x"
        };

        this.IsLoadBusy = true;
        await Task.Delay(2500);
        this.IsLoadBusy = false;
        //await GetItem(id);

        this.Attend = new Attendance
        {
           //Image = "selfie.png",
           AddressDetail = "asdasdasda",
           Created = DateTime.Now,
           Activity = "sadasdasdasfacf",
           Note = "asuuusfasfa"
        };
    }

以下基于此示例。

如果我的问题尚不清楚,请帮助和纠正。

4

1 回答 1

1

我使用你的代码,它在我这边运行良好,我可以向你展示我的示例项目。

public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();


        myViewModel vm = new myViewModel();

        this.BindingContext = vm;
        vm.PerformShimmerAsyncTask("123");
    }
}

public class myViewModel : BaseViewModel
{

    private MyModel _attend;
    private bool _isLoadBusy = false;

    public MyModel Attend
    {
        get { return _attend; }
        set { SetProperty(ref _attend, value); }
    }

    public bool IsLoadBusy
    {
        get { return _isLoadBusy; }
        set
        {
            _isLoadBusy = value;
            OnPropertyChanged();
        }
    }

    public async Task PerformShimmerAsyncTask(string id)
    {

        this.Attend = new MyModel
        {
            AddressDetail = "x",
            Created = DateTime.Now,
            Activity = "x",
            Note = "x"
        };

        this.IsLoadBusy = true;
        await Task.Delay(10000);
        this.IsLoadBusy = false;

        this.Attend = new MyModel
        {
            AddressDetail = "asdasdasda",
            Created = DateTime.Now,
            Activity = "sadasdasdasfacf",
            Note = "asuuusfasfa"
        };
    }

}

public class MyModel 
{
    public string AddressDetail { get; set; }
    public DateTime Created { get; set; }
    public string Activity { get; set; }
    public string Note { get; set; }
}

里面的代码Xaml和你的一样。您应该确保您已正确设置权限bindingContext并正确调用PerformShimmerAsyncTask

在这里上传了我的示例项目。请让我知道这对你有没有用。

于 2019-12-13T06:33:29.210 回答