问题描述
我有一个xamarin项目。有一个带有扩展器列表的滚动视图。
我喜欢每隔x秒刷新一次页面,但保持扩展器的状态(isExpanded布尔值)。
如何检查扩展器(或标签,按钮等)的状态,并在每x秒刷新一次时保持这些值?
我感觉我必须在我的backcode函数中添加一个参数,类似于在单击或单击事件期间的“对象发送者”。
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>
,因此我添加了两个属性Expand1Opened
和Expand2Opened
,并添加了两个Command
和Expand1OpenedCommand
,如果单击Expand2OpenedCommand
,将调用<Expander>
,然后更改Expand1OpenedCommand
的值,如果刷新了刷新视图,则不会更改Expand1Opened
的值,因此{{ 1}}的状态将被保留。
Expand1Opened
此处正在运行GIF。