何らかの形でスクロールバーを使用することになるデータテンプレートがある場合、データコンテキストが前後に変化したときにスクロールバーの位置を保持するにはどうすればよいですか?
通常、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;
}
}
}
編集:一部のコントロールには「表示する」オプションがあることに気付きました。これはスクロールバックに使用できると思いますが、実際に何かを選択する必要があり、常にそうなるとは限りません