如果我有一个最终会以一种或另一种形式使用滚动条的数据模板,那么当数据上下文来回更改时,如何保留滚动条的位置?
我读过您通常将 UI 的状态存储在 ViewModel 中。这对于诸如选定项目或扩展类型状态之类的东西是有意义的,但我不确定如何将它应用于滚动条状态。
我已经在下面发布了我的意思的示例。当您选择一个选项卡并移动滚动条时,然后选择另一个选项卡并移动其滚动条。返回第一个选项卡后,滚动条已移动。
我相信这是由于视图被共享,所以它保留了从前一个视图滚动的百分比?
<Window x:Class="WpfApplication13.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<TabControl ItemsSource="{Binding Data}">
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Count}"/>
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate>
<ListBox ItemsSource="{Binding}"/>
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
</Window>
namespace WpfApplication13
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Data = new List<string[]>();
for (int i = 1; i < 10; ++i)
{
string[] strings = new string[i * 10];
for (int j = 0; j < i * 10; ++j)
{
strings[j] = new string('z', 100);
}
Data.Add(strings);
}
DataContext = this;
}
public List<string[]> Data
{
get;
set;
}
}
}
编辑:我注意到一些控件有一个“进入视图”选项,我猜它可以用来向后滚动,但是这需要实际选择一些东西,但情况并非总是如此