【问题标题】:Wait for binding update, then lose focus on ListViewItem等待绑定更新,然后失去对 ListViewItem 的关注
【发布时间】:2016-03-17 11:47:20
【问题描述】:

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

SelectedItem 有一个 bool 属性,用于切换 ButtonTextBox 的可见性。

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

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

我曾考虑过代码隐藏,向 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();
            }
        }

【问题讨论】:

  • 请出示相关代码。事实上,我们无法帮助您解决问题。
  • @NahuelIanni,添加了 XAML
  • 还有你的 VM/CS 上的属性 :) 我想看看你是如何更改布尔值以及如何管理它的。
  • @NahuelIanni 添加了属性,没什么特别的。所有事件都被触发,并且正在工作。只有焦点才是问题
  • 你可以写 SelectedActivity.IsInFocus = !SelectedActivity.IsInFocus;选择中的代码更改了事件而不是设置器中的代码。

标签: xaml win-universal-app windows-10-universal


【解决方案1】:

在 listview 的 ItemClick 事件中写入此代码 SelectedActivity.IsInFocus = !SelectedActivity.IsInFocus。 你也可以在 Taped 事件里面写

【讨论】:

    猜你喜欢
    • 2020-06-20
    • 1970-01-01
    • 2012-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多