每x秒刷新一次xaml页面并保持当前扩展器状态

问题描述

我有一个xamarin项目。有一个带有扩展器列表的滚动视图。

我喜欢每隔x秒刷新一次页面,但保持扩展器的状态(isExpanded布尔值)。

如何检查扩展器(或标签,按钮等)的状态,并在每x秒刷新一次时保持这些值?

我感觉我必须在我的backcode函数添加一个参数,类似于在单击或单击事件期间的“对象发送者”。

在幕后代码中,我尝试每隔x秒刷新一次页面

Device.StartTimer(TimeSpan.FromSeconds(x),Updatefunction);

当前,它们在页面刷新时都具有认的isExpanded(false)状态。

解决方法

您可以在viewModel中添加bool属性,然后将此属性绑定到IsExpanded="{Binding Expand1Opened}"选项卡中的<Expander>。当用户单击Expander时,IsExpanded将取决于Expand1Opened属性的值。无论每x秒刷新页面一次,它都将保持当前扩展器状态。然后为Command添加Expander,如果单击了Expander,则ViewModel中的Expand1Opened属性值将更改。

 <RefreshView IsRefreshing="{Binding IsRefreshing}"
                     RefreshColor="Teal"
                     Command="{Binding RefreshCommand}">
            <ScrollView>
                <StackLayout>
                    <Expander IsExpanded="{Binding Expand1Opened}" Command="{Binding Expand1OpenedCommand}">
                    <Expander.Header>
                        <Label Text="List1"
               FontAttributes="Bold"
               FontSize="Medium" />
                    </Expander.Header>
                    <Grid Padding="10">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto" />
                            <ColumnDefinition Width="Auto" />
                        </Grid.ColumnDefinitions>
                        <FlexLayout Direction="Row"
                            Wrap="Wrap"
                            AlignItems="Center"
                            AlignContent="Center"
                            BindableLayout.ItemsSource="{Binding Items}"
                            BindableLayout.ItemTemplate="{StaticResource ColorItemTemplate}" />
                    </Grid>
                </Expander>

                    <Expander IsExpanded="{Binding Expand2Opened}" Command="{Binding Expand2OpenedCommand}">
                    <Expander.Header>
                        <Label Text="List2"
               FontAttributes="Bold"
               FontSize="Medium" />
                    </Expander.Header>
                    <Grid Padding="10">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto" />
                            <ColumnDefinition Width="Auto" />
                        </Grid.ColumnDefinitions>
                        <FlexLayout Direction="Row"
                            Wrap="Wrap"
                            AlignItems="Center"
                            AlignContent="Center"
                            BindableLayout.ItemsSource="{Binding Items}"
                            BindableLayout.ItemTemplate="{StaticResource ColorItemTemplate}" />
                    </Grid>
                </Expander>
                </StackLayout>

            </ScrollView>
        </RefreshView>

这是viewModel。我有两个<Expander>,因此我添加了两个属性Expand1OpenedExpand2Opened,并添加了两个CommandExpand1OpenedCommand,如果单击Expand2OpenedCommand,将调用<Expander>,然后更改Expand1OpenedCommand的值,如果刷新了刷新视图,则不会更改Expand1Opened的值,因此{{ 1}}的状态将被保留。

Expand1Opened

此处正在运行GIF。

enter image description here

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...