当用户在另一个列表视图中选择另一个项时丢失所选值

本文关键字:另一个 选择 用户 列表 视图 | 更新日期: 2023-09-27 18:27:39

我有两个绑定到两个不同属性的ListView。基本上,这是两个选择器(一个用于分钟,另一个用于小时(。

ItemSource绑定到静态List<int>SelectedValue绑定到模型中的属性。

当我从小时列表中选择一个值时,它会保持其所选状态...但是当我从分钟列表中选择第二个值时,它会丢失它,反之亦然。

我相信这是一个图形问题,因为即使未选择一个值,也会保留两个值。

列表视图调用:

        <ListView x:Name="listViewHoursSelect" ItemsSource="{Binding MaxHoursList}" SelectedValue="{Binding SelectedMaxHours}" FontSize="{DynamicResource FontText}" Background="{x:Null}" BorderBrush="{x:Null}" Foreground="{DynamicResource MainGray}" Style="{DynamicResource TimeSelectListView}" ItemsPanel="{DynamicResource TimeSelectItemsPanelTemplate}" Margin="0" ItemContainerStyle="{DynamicResource ListViewItemStyle1}" SelectionMode="Single">
            <ListView.View>
                <GridView>
                    <GridViewColumn Width="Auto"/>
                </GridView>
            </ListView.View>
        </ListView>

项目容器样式:

    <Style x:Key="ListViewItemStyle" TargetType="{x:Type ListViewItem}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ListViewItem}">
                    <StackPanel x:Name="stackPanel">
                        <VisualStateManager.VisualStateGroups>
                            <VisualStateGroup x:Name="CommonStates">
                                <VisualStateGroup.Transitions>
                                    <VisualTransition GeneratedDuration="0:0:0.2"/>
                                </VisualStateGroup.Transitions>
                                <VisualState x:Name="Normal"/>
                                <VisualState x:Name="MouseOver">
                                    <Storyboard>
                                        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="textBlock">
                                            <EasingDoubleKeyFrame KeyTime="0" Value="1"/>
                                        </DoubleAnimationUsingKeyFrames>
                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(TextElement.Foreground)" Storyboard.TargetName="textBlock">
                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource MainRed}"/>
                                        </ObjectAnimationUsingKeyFrames>
                                    </Storyboard>
                                </VisualState>
                                <VisualState x:Name="Disabled">
                                    <Storyboard>
                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(TextElement.Foreground)" Storyboard.TargetName="textBlock">
                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource LightGray}"/>
                                        </ObjectAnimationUsingKeyFrames>
                                    </Storyboard>
                                </VisualState>
                                <VisualState x:Name="Unselected"/>
                                <VisualState x:Name="Selected">
                                    <Storyboard>
                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(TextElement.Foreground)" Storyboard.TargetName="textBlock">
                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource MainRed}"/>
                                        </ObjectAnimationUsingKeyFrames>
                                    </Storyboard>
                                </VisualState>
                                <VisualState x:Name="Focused">
                                    <Storyboard>
                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(TextElement.Foreground)" Storyboard.TargetName="textBlock">
                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource MainRed}"/>
                                        </ObjectAnimationUsingKeyFrames>
                                    </Storyboard>
                                </VisualState>
                                <VisualState x:Name="SelectedUnfocused"/>
                            </VisualStateGroup>
                        </VisualStateManager.VisualStateGroups>
                        <TextBlock x:Name="textBlock" TextWrapping="Wrap" HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding DataContext, RelativeSource={RelativeSource TemplatedParent}}" Background="{x:Null}" Foreground="{DynamicResource MainGray}"/>
                    </StackPanel>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

我重新设计了很多ListView,甚至设置了所有状态(正常、鼠标悬停、选定等(。 我很难找到为什么它会保留所选值,直到我在另一个列表中选择另一个值。

如果您需要一些代码,请告诉我,我还没有发布任何内容,因为它很多。

当用户在另一个列表视图中选择另一个项时丢失所选值

解决了,我忘了设置选择未聚焦状态:)

                                    <VisualState x:Name="SelectedUnfocused">
                                    <Storyboard>
                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(TextElement.Foreground)" Storyboard.TargetName="textBlock">
                                            <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource MainRed}"/>
                                        </ObjectAnimationUsingKeyFrames>
                                    </Storyboard>
                                </VisualState>
相关文章: