在 MVVM 中使用 ScrollViewer 滚动到控件的顶部

Scroll to top of a control with ScrollViewer in MVVM

我在 Visual Studio 2015 年获得了一个 MVVM Light WPF 应用程序。 ScrollViewer 包含 MainWindow.xaml 中的内容,后者又包含 TabControl 中的内容。 TabItem 控件之一包含 DataGrid。当用户单击 DataGrid 的一行时,我们在绑定到 [=20] 的视图模型上使用 SelectedEmployee 属性 显示 tcEmployeeDetails TabControl =] 的数据网格:

<ScrollViewer>
    <Border>
        <DockPanel>
            <TabControl>
                <TabItem>
                    <!-- Search controls go here... -->

                    <DataGrid SelectedItem="{Binding SelectedEmployee}">
                        <!-- DataGrid columns here... -->
                    </DataGrid>

                    <!-- How do I scroll the ScrollViewer to here? -->
                    <TabControl x:Name="tcEmployeeDetails">
                        <!-- TabItems go here... -->
                    </TabControl>
                </TabItem>
                <TabItem>
                    <!-- Other items here... -->
                </TabItem>
            </TabControl>
        </DockPanel>
    </Border>
</ScrollViewer>

当用户选择了 DataGrid 的一行时,如何将 ScrollViewer 滚动到 tcEmployeeDetails 的顶部?

将 属性 添加到您的虚拟机:

private double _scrollViewerVerticalOffset;
public double ScrollViewerVerticalOffset 
{
    get { return _scrollViewerVerticalOffset; }
    set { _scrollViewerVerticalOffset = value; }
}

将此 属性 绑定到滚动查看器的 VerticalOffset

<ScrollViewer VerticalOffset="{Binding ScrollViewerVerticalOffset}">

并修改 setter 为 SelectedEmployee:

public double _scrollViewerVerticalOffset 
{
   get { ... }
   set {
           if (this.SelectedEmployee != value)  
                  ScrollViewerVerticalOffset = 0;
       }
 }