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

C# 使用MVVM中的ScrollViewer滚动到控件顶部,c#,wpf,mvvm,datagrid,scrollviewer,C#,Wpf,Mvvm,Datagrid,Scrollviewer,我在Visual Studio 2015中有一个MVVM Light WPF应用程序。一个ScrollViewer包含main window.xaml中的内容,而后者又包含一个TabControl。一个选项卡项控件包含一个数据网格。当用户单击数据网格的一行时,我们使用绑定到数据网格的SelectedItem的视图模型上的SelectedEmployee属性显示tcEmployeeDetailsTabControl: <ScrollViewer> <Border>

我在Visual Studio 2015中有一个MVVM Light WPF应用程序。一个
ScrollViewer
包含
main window.xaml
中的内容,而后者又包含一个
TabControl
。一个
选项卡项
控件包含一个
数据网格
。当用户单击数据网格的一行时,我们使用绑定到数据网格的
SelectedItem
的视图模型上的
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; }
}
将此属性绑定到scrollviewer的
垂直偏移量

<ScrollViewer VerticalOffset="{Binding ScrollViewerVerticalOffset}">

ScrollViewer.VerticalOffset
是一个只读属性。@JokeHuang有趣的是,这才刚刚曝光。你还在寻找解决方案吗?我将尝试用一个有效的答案编辑答案,我只是现在没有时间。
public double _scrollViewerVerticalOffset 
{
   get { ... }
   set {
           if (this.SelectedEmployee != value)  
                  ScrollViewerVerticalOffset = 0;
       }
 }