WPF/MVVM:在不同视图中同步滚动两个数据网格

ste*_*rus 8 c# wpf datagrid datagridview mvvm

我有两个数据网格并排绑定到不同的数据表,每个数据表都有自己的视图.

数据表都具有相同的行数,我希望两个网格保持相同的滚动位置.

我很难找到使用MVVM做到这一点的方法......任何人都有任何想法?

谢谢!-Steven

vol*_*ody 8

看一下codeproject Scroll Synchronization


小智 6

我能够通过一些反思黑客来解决这个问题:

<DataGrid Name="DataGrid1" ScrollViewer.ScrollChanged="DataGrid1_ScrollChanged" />
<DataGrid Name="DataGrid2" />
Run Code Online (Sandbox Code Playgroud)

而代码本身是:

    private void DataGrid1_ScrollChanged(object sender, ScrollChangedEventArgs e)
    {
        if (e.HorizontalChange != 0.0f)
        {
            ScrollViewer sv = null;
            Type t = DataGrid1.GetType();
            try
            {
                sv = t.InvokeMember("InternalScrollHost", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetProperty, null, DataGrid2, null) as ScrollViewer;
                sv.ScrollToHorizontalOffset(e.HorizontalOffset);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)