gpt4 book ai didi

wpf - 显示添加到 ItemsControl 的最新项目

转载 作者:行者123 更新时间:2023-12-04 06:27:13 25 4
gpt4 key购买 nike

我不敢相信在搜索谷歌和 SO 半小时后我找不到解决方案。

我有一个 ObservableCollection<string>在我的 ViewModel 中,一个 ListBox在我看来,必须:

<ListBox ItemsSource="{Binding Output}" IsSynchronizedWithCurrentItem="True" />

当一个按钮被点击时,一个新线程会做一些事情,并且使用一个 Observable,VM 监视从异步操作返回的字符串并将这些字符串添加到它的 Output 中。 ObservableCollection .添加字符串没有问题,但是如何让 View 始终显示最新项目(最近添加的项目)?

最佳答案

您的项目是否显示在列表中,但位于更远的位置?如果是这种情况,您需要做的就是告诉列表将该项目滚动到 View 中。您可以通过订阅 ListBox.Items 属性的 ColllectionChanged 来完成此操作。要做到这一点有点棘手,因为你必须转换它,但你可以使用这样的代码来做到这一点:

((INotifyCollectionChanged)MainListBox.Items).CollectionChanged +=  ListBox_CollectionChanged;

然后在该事件中,您可以添加如下代码:
private void ListBox_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
if (e.NewItems.Count > 0)
{
Dispatcher.BeginInvoke(() =>
{
MainListBox.ScrollIntoView(e.NewItems[0]);
}, DispatcherPriority.SystemIdle);
}
}

此外,我刚刚找到了一种方法,您可以使用非常酷的附加属性来执行此操作。在这里查看:
http://michlg.wordpress.com/2010/01/16/listbox-automatically-scroll-currentitem-into-view/

关于wpf - 显示添加到 ItemsControl 的最新项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5904630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com