当datacontext更改时,如何防止滚动条丢失其状态?

时间:2013-02-15 22:14:48

标签: wpf binding view scrollbar state

如果我的数据模板最终会以某种形式使用滚动条,那么当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;
        }
    }
}

编辑:我注意到一些控件有一个“进入视图”选项,我猜这可以用来向后滚动,但那时需要实际选择一些东西,这并不总是情况下

0 个答案:

没有答案