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

标签 c# wpf mvvm datagrid scrollviewer

我在 Visual Studio 2015 中有一个 MVVM Light WPF 应用程序。ScrollViewer 包含 MainWindow.xaml 中的内容,后者又包含一个 TabControl 。其中一个 TabItem 控件包含一个 DataGrid。当用户单击 DataGrid 的一行时,我们使用 SelectedEmployee 属性显示 tcEmployeeDetails TabControl绑定(bind)到数据网格的 SelectedItem 的 View 模型:

<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; }
}

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

<ScrollViewer VerticalOffset="{Binding ScrollViewerVerticalOffset}">

并修改 SelectedEmployee 的 setter:

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

关于c# - 在 MVVM 中使用 ScrollViewer 滚动到控件的顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36500175/

相关文章:

C# Rhino.Mocks - 如何在不重复自己的情况下编写测试代码?

c# - 我如何告诉设计者我的自定义 winforms 控件具有固定高度?

c# - CsharpRepl 和交互式 shell 在 Mono for Win 中位于何处?

WPF 数据绑定(bind)和类型转换

c# - MVVM Light RaisePropertyChanged

c# - 为什么 List<T> 实现这么多接口(interface)?

WPF - 允许在单选按钮组中进行多项选择的错误

c# - Log4Net 无法登录应用程序关闭事件

xamarin - Xamarin MVVM传递对象属性

c# - ItemsControl 和 Canvas 中的多个数据模板