gpt4 book ai didi

wpf - 有没有一种简单的方法可以让 ListView 自动滚动到最近添加的项目,而无需在后面的代码中编写任何代码?

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

我有一个绑定(bind)到可观察集合的 ListView。随着项目被添加到可观察集合中, ListView 不会自动滚动以显示最近添加的项目。我正在尝试遵守良好的 WPF 实践,并希望避免在 View 的代码隐藏中编写任何代码。有没有一种简单的方法可以通过 XAML 或相应的模型代码来实现这一点?

<ListView HorizontalAlignment="Center" ItemsSource="{Binding ScenarioSnippets}" Background="{x:Null}" 
BorderBrush="{x:Null}" BorderThickness="0" SelectionMode="Single" VerticalAlignment="Top"
HorizontalContentAlignment="Center" IsSynchronizedWithCurrentItem="True">
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="Focusable" Value="False" />
</Style>
</ListView.ItemContainerStyle>
<ListView.View>
<GridView Selector.IsSelected="True" AllowsColumnReorder="False">
<GridView.Columns>
<GridViewColumn CellTemplate="{StaticResource ScenarioSnippetItemCellTemplate}"
HeaderContainerStyle="{StaticResource GridViewHeaderStyle}" />
</GridView.Columns>
</GridView>
</ListView.View>
</ListView>

最佳答案

您可以使用混合行为:

public class AutoScrollToLastItemBehavior : Behavior<ListBox>
{
protected override void OnAttached()
{
base.OnAttached();
var collection = AssociatedObject.Items.SourceCollection as INotifyCollectionChanged;
if (collection != null)
collection.CollectionChanged += collection_CollectionChanged;
}

protected override void OnDetaching()
{
base.OnDetaching();
var collection = AssociatedObject.Items.SourceCollection as INotifyCollectionChanged;
if (collection != null)
collection.CollectionChanged -= collection_CollectionChanged;
}

private void collection_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
if (e.Action == NotifyCollectionChangedAction.Add)
{
ScrollToLastItem();
}
}

private void ScrollToLastItem()
{
int count = AssociatedObject.Items.Count;
if (count > 0)
{
var last = AssociatedObject.Items[count - 1];
AssociatedObject.ScrollIntoView(last);
}
}
}

XAML:
<ListView ItemsSource="...">
<i:Interaction.Behaviors>
<local:AutoScrollToLastItemBehavior />
</i:Interaction.Behaviors>
</ListView>

( BehaviorInteraction 类可以在 Blend SDK 中的 System.Windows.Interactivity.dll 中找到)

关于wpf - 有没有一种简单的方法可以让 ListView 自动滚动到最近添加的项目,而无需在后面的代码中编写任何代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8480252/

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