Events 如何将事件绑定到ContentView的属性IsVisible?

Events 如何将事件绑定到ContentView的属性IsVisible?,events,xamarin.forms,controls,lottie,propertychanged,Events,Xamarin.forms,Controls,Lottie,Propertychanged,我在Xamarin.Forms中创建了一个控件,允许我显示一个可重用的错误视图,其中包含ContentView和Lottie动画 我的视图包含:Lottie动画、2个标签(标题和描述)和一个“重试”按钮 洛蒂动画设置如下,因为我希望动画只显示一次: <lottie:AnimationView x:Name="networkErrorAnimationView" Animation="resource://lottie_error_no_netw

我在Xamarin.Forms中创建了一个控件,允许我显示一个可重用的错误视图,其中包含
ContentView
Lottie
动画

我的视图包含:
Lottie
动画、2个
标签
(标题和描述)和一个“重试”
按钮

洛蒂动画设置如下,因为我希望动画只显示一次:

<lottie:AnimationView
    x:Name="networkErrorAnimationView"
    Animation="resource://lottie_error_no_network.json?assembly=ShellAppSample"
    AnimationSource="EmbeddedResource"
    BackgroundColor="Transparent"
    AutoPlay="True"
    HeightRequest="200" WidthRequest="200"
    VerticalOptions="Center" HorizontalOptions="Center"
    Clicked="NetworkErrorAnimationView_Clicked"/>

问题是,当我从父视图显示错误控制时,动画已经播放:

<ctrl:ErrorView IsVisible="{Binding ShowErrorView, Converter={StaticResource BoolToVisibilityConverter}}"
                Title="{Binding ErrorTitle}"
                Description="{Binding ErrorDescription}"
                ErrorKind="{Binding ErrorKind}"
                RetryButtonCommand="{Binding RetryCommand}" />


我想知道是否有方法将事件绑定到控件的IsVisible属性,以便此时重新启动相应的动画?

您可以为
ctrl:ErrorView
添加属性,然后在开始时将
自动播放设置为false

这是
ctrl:ErrorView
的布局

<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>
在Contentpage中使用此控件

 <ctrl:ErrorView IsVisible="{Binding Isfavourite}" TitleText="{Binding Name}" IsStartAnimationView="{Binding IsStart}" ></ctrl:ErrorView>
这里是运行gif


解决方案是另一天给我的。我只需将此代码添加到控件的代码隐藏中:

protected override void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
    base.OnPropertyChanged(propertyName);
    if (propertyName == nameof(IsVisible))
    {
        if (this.IsVisible)
        {
            networkErrorAnimationView.PlayAnimation();
        }
        else
        {
                networkErrorAnimationView.StopAnimation();
        }
    }
}

这会有帮助吗?您好@Cfun谢谢您的建议。我认为我的问题更多地与control/
ContentView
的使用有关,而不是与
LottieAnimation
本身有关。我已经实现了类似的解决方案,可以在父视图上显示加载视图,如您所见。如果答复有帮助,请将其作为答案接受(单击“✔” 在这个答案的左上角),它将帮助其他有类似问题的人Hi@Leon Lu,我已经实施了一个给我的更轻松的解决方案。谢谢你的时间。我的答案也是如此!请仔细查看答案
 private async void Button_Clicked(object sender, System.EventArgs e)
        {
           
                 myViewModel.IsStart = !myViewModel.IsStart;
        }
protected override void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
    base.OnPropertyChanged(propertyName);
    if (propertyName == nameof(IsVisible))
    {
        if (this.IsVisible)
        {
            networkErrorAnimationView.PlayAnimation();
        }
        else
        {
                networkErrorAnimationView.StopAnimation();
        }
    }
}