关注绑定到集合的listview的最后一行—wpf mvvm

关注绑定到集合的listview的最后一行—wpf mvvm,wpf,mvvm,data-binding,wpf-controls,Wpf,Mvvm,Data Binding,Wpf Controls,在wpf项目中,我将listview“绑定”到集合 每次我向集合中添加一个项目时,我希望列表视图的焦点转到最后一行(添加的那一行) 怎么做 //XAML <ListView x:Name="logListActions" Height="200" MinHeight="150" HorizontalAlignment="Stretch"

在wpf项目中,我将listview“绑定”到集合 每次我向集合中添加一个项目时,我希望列表视图的焦点转到最后一行(添加的那一行) 怎么做

//XAML
<ListView
                x:Name="logListActions"
                Height="200"
                MinHeight="150"
                HorizontalAlignment="Stretch"
                VerticalAlignment="Stretch"
                Background="WhiteSmoke"
                BorderThickness="1"
                ItemsSource="{Binding LogMessages}">
                <ListView.View>
                    <GridView AllowsColumnReorder="True">
                        <GridViewColumn
                            Width="110"
                            DisplayMemberBinding="{Binding When}"
                            Header="Data" />
                        <GridViewColumn
                            Width="Auto"
                            DisplayMemberBinding="{Binding Message}"
                            Header="Messaggio" />
                    </GridView>
                </ListView.View>
            </ListView>



//ViewModel
public ObservableCollection<LogMessage> LogMessages
        {
            get { return _logMessageList; }
            set
            {
                _logMessageList = value;
                OnPropertyChanged("LogMessages");
            }
        }
//XAML
//视图模型
公共可观察收集日志消息
{
获取{return\u logMessageList;}
设置
{
_logMessageList=值;
OnPropertyChanged(“日志消息”);
}
}

将新项目添加到列表框后,从代码隐藏调用以下代码:

logListActions.ScrollIntoView(item);
logListActions.SelectedItem = item;

ListView
SelectedItem
属性绑定到视图模型中的
LogMessage
属性,并将后者设置为最后添加的
LogMessage
对象:

<ListView ... ItemsSource="{Binding LogMessages}" SelectedItem="{Binding SelectedLogMessage}">
这将选择最后一行。然后,您可以在视图中处理
SelectionChanged
事件以聚焦并突出显示它:

private void logListActions_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (e.AddedItems != null && e.AddedItems.Count > 0)
    {
        Dispatcher.BeginInvoke(new Action(() =>
        {
            ListViewItem lvi = logListActions.ItemContainerGenerator.ContainerFromItem(e.AddedItems[0]) as ListViewItem;
            if (lvi != null)
                lvi.Focus();
        }), System.Windows.Threading.DispatcherPriority.Background);
    }
}

代码隐藏在哪里?在xaml.cs文件中还是在viewmodel中?在视图模型中,控件“logListActions”不可访问/引用。如果进入xaml.cs的哪个方法?在xaml.cs中。但您必须确定在向ListView添加新项后触发的某个事件。我在上找到的另一个好方法。
private void logListActions_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (e.AddedItems != null && e.AddedItems.Count > 0)
    {
        Dispatcher.BeginInvoke(new Action(() =>
        {
            ListViewItem lvi = logListActions.ItemContainerGenerator.ContainerFromItem(e.AddedItems[0]) as ListViewItem;
            if (lvi != null)
                lvi.Focus();
        }), System.Windows.Threading.DispatcherPriority.Background);
    }
}