UWP:滚动ListView以关注项目

UWP:滚动ListView以关注项目,uwp,Uwp,我的应用程序中有两个列表视图,它们的布局都相同: <ListView x:Name="TextContent" SelectionChanged="LineSelected"> <ListView.ItemTemplate> <DataTemplate x:DataType="models:TextLine>

我的应用程序中有两个列表视图,它们的布局都相同:

<ListView x:Name="TextContent"
          SelectionChanged="LineSelected">
          <ListView.ItemTemplate>
              <DataTemplate x:DataType="models:TextLine>
                  <Grid>
                      <Grid.ColumnDefinitions>
                          <ColumnDefinition Width="30"/>
                          <ColumnDefinition Width="*"/>
                      </Grid.ColumnDefinitions>
                      <TextBlock Grid.Column="0"
                                 Height="16"
                                 Style="{ThemeResource CaptionTextBlockStyle}"
                                 Text="{Binding LineNumber}"/>
                      <TextBlock Grid.Column="1"
                                 Height="16"
                                 Style="{ThemeResource CaptionTextBlockStyle}"
                                 Text="{Binding Text}"/>
                   </Grid>
               </DataTemplate>
           </ListView.ItemTemplate>
</ListView>
我尝试了以下方法:

  • ListView.ScrollIntoView未执行任何操作。。。我传递了一项作为参数
  • 从ListView的可视化树中获取ScrollViewer,并尝试更改视图,但也不起作用

问题是:如果我在ListView A中选择项目X,那么我想在ListView B中选择项目X并自动滚动到它。这可能吗?

您是否尝试将datatemplates数据类型设置为要放入listview的对象的类型?或者listview的datacontext?我添加了它,但没有更改。仍然无法滚动。Hello@Christoff,您是否覆盖了您提供的
TextLine
类型中的
Equal
方法?当使用
ListView.ScrollIntoView()
方法时,代码将使用比较器来比较传入的参数。我现在已经这样做了(用该代码更新了帖子),但它没有解决问题。Hello@Christoff,你能提供一个最小的可复制演示吗?我只是测试了现有的代码,它工作得很好。
namespace MyApp.Models
{
    internal class TextLine
    {
        public int LineNumber { get; set; }

        public string Text { get; set; }

        public override bool Equals(object obj)
        {
            var other = obj as TextLine;

            return 
                this.LineNumber == other.LineNumber &&
                this.Text.Equals(other.Text);
        }

        public override int GetHashCode()
        {
            return this.LineNumber.GetHashCode() ^ this.Text.GetHashCode();
        }
    }
}