1

如果我有一个最终会以一种或另一种形式使用滚动条的数据模板,那么当数据上下文来回更改时,如何保留滚动条的位置?

我读过您通常将 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;
        }
    }
}

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

4

0 回答 0