WPF ListView项目仅在显示MessageBox后才被选中

WPF ListView项目仅在显示MessageBox后才被选中,wpf,listview,Wpf,Listview,我有一个奇怪的问题:我试图在WPF ListView中选择一个项目,如下所示: int lineIndex = 123; scrollView.ScrollToVerticalOffset(lineIndex); myListView.SelectedIndex = lineIndex; int lineIndex = 123; scrollView.ScrollToVerticalOffset(lineIndex); MessageBox.Show("msg"); myListView.Se

我有一个奇怪的问题:我试图在WPF ListView中选择一个项目,如下所示:

int lineIndex = 123;
scrollView.ScrollToVerticalOffset(lineIndex);
myListView.SelectedIndex = lineIndex;
int lineIndex = 123;
scrollView.ScrollToVerticalOffset(lineIndex);
MessageBox.Show("msg");
myListView.SelectedIndex = lineIndex;
但由于某种原因,选择失败了。只有在select语句之前显示MessageBox时,选择才会起作用,如下所示:

int lineIndex = 123;
scrollView.ScrollToVerticalOffset(lineIndex);
myListView.SelectedIndex = lineIndex;
int lineIndex = 123;
scrollView.ScrollToVerticalOffset(lineIndex);
MessageBox.Show("msg");
myListView.SelectedIndex = lineIndex;

单击消息框上的
OK
按钮后,索引被选中。这是因为显示UI线程时,消息框会阻止它吗?如果是这样,如何在不显示消息框的情况下模拟此行为?

正在使用您可用的SelectedItem属性,而不是在listview中使用scrollviewer?下面的代码演示如何选择列表中的第20项并滚动到其偏移量

<Window x:Class="testt.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:testt"
    mc:Ignorable="d"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>
    <ListView Name="myListView"/>
    <Button Grid.Row="1" Height="40" Click="Button_Click">click</Button>
</Grid>

点击

以及背后的代码

using System.Windows;

namespace testt
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            for (int i = 0; i < 100; i++)
                myListView.Items.Add("A test item " + i.ToString());
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            int lineIndex = 20;
            var item = myListView.Items[lineIndex];
            myListView.ScrollIntoView(item);
            myListView.SelectedItem = item;
        }
    }
}
使用System.Windows;
名称空间测试
{
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
对于(int i=0;i<100;i++)
添加(“一个测试项”+i.ToString());
}
私有无效按钮\u单击(对象发送者,路由目标e)
{
int-lineIndex=20;
var item=myListView.Items[lineIndex];
myListView.ScrollIntoView(项目);
myListView.SelectedItem=项目;
}
}
}

我无法使用
滚动视图
,因为我的ListView正在使用数据虚拟化。ListView的项是类的实例。这似乎是UI/工作线程的某种问题。因为当我显示消息框并单击
OK
时,UI/worker线程将继续并正确选择项目。。