如果我的数据模板最终会以某种形式使用滚动条,那么当datacontext来回变换时,如何保留滚动条位置?
我已经读过你通常在ViewModel中存储UI的状态。这对于像所选项目这样的事情是有意义的,或者是扩展类型状态,但我不确定如何将它应用于滚动条状态。
我发布了一个我在下面的意思的例子。选择选项卡并移动滚动条时,请选择另一个选项卡并移动其滚动条。返回第一个选项卡后,滚动条已移动。
我认为这是因为View被共享,所以它保留了从上一个视图滚动的百分比?
<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;
}
}
}
编辑:我注意到一些控件有一个“进入视图”选项,我猜这可以用来向后滚动,但那时需要实际选择一些东西,这并不总是情况下