You can add an property for your ctrl:ErrorView
, then set the AutoPlay
to false at the begining.
Here is ctrl:ErrorView
's layout.
<ContentView xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:forms="clr-namespace:Lottie.Forms;assembly=Lottie.Forms"
x:Name="MyErrorView"
x:Class="App13.ErrorView">
<ContentView.Content>
<StackLayout>
<forms:AnimationView
x:Name="animationView"
Animation="1.json"
AnimationSource="AssetOrBundle"
RepeatCount="1"
AutoPlay="False"
WidthRequest="100"
HeightRequest="100"/>
<Label x:Name="title" Text="test" />
<Label Text="Hello Xamarin.Forms!" />
</StackLayout>
</ContentView.Content>
</ContentView>
Here is ctrl:ErrorView
's background code. Then I add IsStartAnimationView
property. if the IsStartAnimationView
's binding value to true. Then play the Animation.
public partial class ErrorView : ContentView
{
public string TitleText
{
get { return (string)GetValue(TitleTextProperty); }
set { SetValue(TitleTextProperty, value); }
}
public static readonly BindableProperty TitleTextProperty = BindableProperty.Create(
propertyName: "TitleText",
returnType: typeof(string),
declaringType: typeof(ErrorView),
defaultValue: "",
defaultBindingMode: BindingMode.TwoWay,
propertyChanged: TitleTextPropertyChanged);
private static void TitleTextPropertyChanged(BindableObject bindable, object oldValue, object newValue)
{
// var control = (ErrorView)bindable;
// control.title.Text = newValue.ToString();
}
public bool IsStartAnimationView
{
get { return (bool)GetValue(IsStartAnimationViewProperty); }
set { SetValue(IsStartAnimationViewProperty, value); }
}
public static readonly BindableProperty IsStartAnimationViewProperty = BindableProperty.Create(
propertyName: "IsStartAnimationView",
returnType: typeof(bool),
declaringType: typeof(ErrorView),
defaultValue: false,
defaultBindingMode: BindingMode.TwoWay,
propertyChanged: IsStartAnimationViewChanged);
private static void IsStartAnimationViewChanged(BindableObject bindable, object oldValue, object newValue)
{
// throw new NotImplementedException();
var MyValue =(bool) newValue;
if (MyValue == true) {
var control = (ErrorView)bindable;
control.animationView.PlayAnimation();
}
}
public ErrorView()
{
InitializeComponent();
this.Content.BindingContext = this;
}
}
}
Use this control in the Contentpage.
<ctrl:ErrorView IsVisible="{Binding Isfavourite}" TitleText="{Binding Name}" IsStartAnimationView="{Binding IsStart}" ></ctrl:ErrorView>
I use button click event to make a test.
private async void Button_Clicked(object sender, System.EventArgs e)
{
myViewModel.IsStart = !myViewModel.IsStart;
}
Here is running gif.
