等待绑定更新,然后失去对 ListViewItem 的关注

Wait for binding update, then lose focus on ListViewItem

所以我有一个 ListView。它有一个 ItemSource 和一个 SelectedItem

SelectedItem 有一个布尔值 属性,用于切换 ButtonTextBox.

的可见性

当您按下 ListViewItem 时,我希望能够打开和关闭可见性,即使我只是在该行中发送垃圾邮件。

该解决方案部分有效,除了 SelectedItem 仅在 Item 没有焦点时才会触发。因此,当我切换了一次后,我必须对另一个项目执行此操作才能再次切换第一个。

我考虑过 code-behind,在 GotFocus 方法中添加一些东西,但想不出我有什么在那里做。

建议?

XAML:

<ListView ScrollViewer.VerticalScrollMode="Disabled"          
              ScrollViewer.VerticalScrollBarVisibility="Disabled"            
              ScrollViewer.IsVerticalRailEnabled="False"           
              Background="White"  
              ItemsSource="{Binding Activities}"
              SelectedItem="{Binding SelectedActivity, Mode=TwoWay}">
        <ListView.ItemContainerStyle>
            <Style TargetType="ListViewItem">
                <Setter Property="HorizontalContentAlignment" Value="Stretch" />
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="ListViewItem">
                            <ListViewItemPresenter
                        ContentTransitions="{TemplateBinding ContentTransitions}"
                        SelectionCheckMarkVisualEnabled="True"
                        CheckBrush="{ThemeResource SystemControlForegroundBaseMediumHighBrush}"
                        CheckBoxBrush="{ThemeResource SystemControlForegroundBaseMediumHighBrush}"
                        DragBackground="{ThemeResource ListViewItemDragBackgroundThemeBrush}"
                        DragForeground="{ThemeResource ListViewItemDragForegroundThemeBrush}"
                        FocusBorderBrush="{ThemeResource SystemControlForegroundAltHighBrush}"
                        FocusSecondaryBorderBrush="{ThemeResource SystemControlForegroundBaseHighBrush}"
                        PlaceholderBackground="White"
                        PointerOverBackground="LightGray"
                        PointerOverForeground="DarkGray"
                        SelectedBackground="White"
                        SelectedForeground="DimGray"
                        SelectedPointerOverBackground="White"
                        PressedBackground="White"
                        SelectedPressedBackground="White"
                        DisabledOpacity="{ThemeResource ListViewItemDisabledThemeOpacity}"
                        DragOpacity="{ThemeResource ListViewItemDragThemeOpacity}"
                        ReorderHintOffset="{ThemeResource ListViewItemReorderHintThemeOffset}"
                        HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
                        VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
                        ContentMargin="{TemplateBinding Padding}"
                        CheckMode="Inline"/>
                        </ControlTemplate>
                    </Setter.Value>
                    </Setter>
            </Style>
        </ListView.ItemContainerStyle>

        <ListView.Header>
            <StackPanel Background="#8c8c8c" 
                                    Orientation="Horizontal" 
                                    FlowDirection="LeftToRight" 
                                    Padding="8,8,8,8">
                <TextBlock Text="{Binding Title}" 
                                                        FontSize="18" 
                                                        Foreground="White" 
                                                        HorizontalAlignment="Left" 
                                                        VerticalAlignment="Center" 
                                                        Margin="10,0,0,0"/>
            </StackPanel>
        </ListView.Header>
        <ListView.ItemTemplate>
            <DataTemplate>
                <Grid Margin="0,10,0,10">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="*"/>
                        <RowDefinition Height="*"/>
                        <RowDefinition Height="*"/>
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="200"/>
                        <ColumnDefinition Width="*"/>
                    </Grid.ColumnDefinitions>
                    <StackPanel Orientation="Vertical" 
                                        Grid.Row="0" 
                                        Grid.RowSpan="2" 
                                        Grid.Column="0"
                                        VerticalAlignment="Center" 
                                        HorizontalAlignment="Left"
                                        Margin="6,2,6,2">
                        <TextBlock FontSize="20" 
                                           VerticalAlignment="Center"
                                           Foreground="DimGray" 
                                           TextWrapping="WrapWholeWords"
                                           Text="{Binding Activity.Description}"/>
                        <TextBlock FontSize="15" 
                                           VerticalAlignment="Center"
                                           Foreground="DimGray" 
                                           Text="{Binding Activity.Condition}"/>
                    </StackPanel>

                    <Button Grid.Row="0" 
                                    Grid.Column="1" 
                                    Grid.RowSpan="2" 
                                    Margin="6"
                                    VerticalAlignment="Center"
                                    HorizontalAlignment="Right"
                                    Background="Transparent"
                                    BorderBrush="Transparent"
                                    BorderThickness="0"
                                    Command="{Binding ToggleMeasureCompletionCommand}">
                        <Grid>
                            <TextBlock FontFamily="Segoe MDL2 Assets"
                                            FontSize="35"
                                            Foreground="DimGray"
                                            Text="&#xE739;"
                                            Margin="8"
                                            VerticalAlignment="Center"
                                            HorizontalAlignment="Right"
                                            Visibility="{Binding IsCompleted, Converter={StaticResource InverseBooleanToVisibilityConverter}}"/>
                            <TextBlock FontFamily="Segoe MDL2 Assets"
                                            FontSize="35"
                                            Foreground="DimGray"
                                            Text="&#xE73A;"
                                            Margin="8"
                                            VerticalAlignment="Center"
                                            HorizontalAlignment="Right" 
                                           Visibility="{Binding IsCompleted, Converter={StaticResource BoolToVis}}"/>
                        </Grid>
                    </Button>
                    <Grid Visibility="{Binding IsInFocus, Converter={StaticResource BoolToVis}}" Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2" Margin="0,10,0,0">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*"/>
                            <ColumnDefinition Width="Auto"/>
                        </Grid.ColumnDefinitions>
                        <TextBox Grid.Column="0" PlaceholderText="Kommentar til tiltak" HorizontalAlignment="Stretch" Padding="5" Margin="0,0,10,0"/>
                        <Button Grid.Column="1" Content="Flag" HorizontalAlignment="Right" Foreground="White" Padding="10,5,10,5">
                            <Button.Background>
                                <SolidColorBrush Color="Red" Opacity="0.5" />
                            </Button.Background>
                        </Button>
                    </Grid>
                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

C# - 属性:

public SelectedItemViewModel SelectedActivity
        {
            get { return _selectedActivity; }
            set
            {
                _selectedActivity = value;
                SelectedActivity.IsInFocus = !SelectedActivity.IsInFocus;
                OnPropertyChanged();
            }
        }

在列表视图的 ItemClick 事件中写入此代码 SelectedActivity.IsInFocus = !SelectedActivity.IsInFocus。 您也可以在 Taped 事件中写入