Maui-Net.8-集合视图中的所有项目都有动画。不是被窃听的那个

问题描述 投票:0回答:1

我的毛伊岛 Android 项目之一,我在页面中有一个集合视图。

我像这样设置集合视图的属性:

    <CollectionView x:Name="ModelList"
                    SelectionMode="None"
                    IsGrouped="False"
                    ItemSizingStrategy="MeasureAllItems"
                    ItemsSource="{Binding Models}"
                    VerticalOptions="FillAndExpand">

        <CollectionView.ItemsLayout>
            <GridItemsLayout Span="2" Orientation="Vertical"/>
        </CollectionView.ItemsLayout>

        <CollectionView.ItemTemplate>
            <DataTemplate x:DataType="models:Model">
                <VerticalStackLayout Spacing="3" HorizontalOptions="Center" Margin="0,0,0,10">
                    <views:CustomView
                        x:Name="Cstm"                                
                        IsBusy="{Binding IsBusy, Source={RelativeSource AncestorType={x:Type viewmodel:ViewModel}}}"  <-- IsBusy property is bindable Property.-->
                        ControlTemplate="{StaticResource TappedView}">
                        
                        <views:CustomView.GestureRecognizers>
                            <TapGestureRecognizer Command="{Binding ModelDetailsPageCommand, Source={RelativeSource AncestorType={x:Type viewmodel:ProjectPageViewModel}}}" CommandParameter="{Binding Id}"/>
                        </views:CustomView.GestureRecognizers>

                    </views:CustomView>
                </VerticalStackLayout>
            </DataTemplate>
        </CollectionView.ItemTemplate>
    </CollectionView>

集合视图的项目模板使用自定义视图填充,并且该自定义视图的控件模板是自定义控件。它的布局是这样的:

<ControlTemplate x:Key="CustomControl">
    <Border x:Name="CustomLayout">
        <Grid>
            <Border attached:ControlTappedAttachedProperty.Value="{TemplateBinding IsBusy}"> <--AttachedProperty-->
                <Image HeightRequest="60">
                    <Image.Source>
                        <FontImageSource FontFamily="Font" Glyph="{x:Static Font.ThereIsAProblem}" Color="{StaticResource YsSomeColor}" />
                    </Image.Source>
                </Image>
            </Border>
        </Grid>
    </Border>
</ControlTemplate>

此控件附加属性的值绑定自定义控件的可绑定属性。

附加属性只是对附加的视觉元素进行动画处理。

问题就在这里。当点击集合视图中的项目时,所有项目都会有动画。不只是被窃听的那个。

尝试过:

  • 将选择模式更改为单选不起作用。
  • 附加附加属性顶部父对象(Collectionview item ->
    <views:CustomView/>
    )而不是自定义控件无效。同样的问题。

所以...我很困惑。任何帮助任何想法都将非常感激。预先感谢。

animation maui .net-8.0 collectionview attached-properties
1个回答
0
投票

在您的代码中,您使用以下绑定:

IsBusy="{Binding IsBusy, Source={RelativeSource AncestorType={x:Type viewmodel:ViewModel}}}"

BindableProperty
绑定到您的
IsBusy
中的
ViewModel
属性。因此,当您点击某个项目并更改
IsBusy
值时,所有项目都会反映此更改,因为它们共享相同的
ViewModel-level
IsBusy
属性。

为了确保每个项目都可以有自己的

IsBusy
状态,请考虑向模型类添加
IsBusy
属性。然后,在点击事件中,您可以更新特定项目的
IsBusy
属性,如下所示:

model.IsBusy = true;

这样,列表中每个项目的 IsBusy 状态都是唯一的。

© www.soinside.com 2019 - 2024. All rights reserved.