I have two datagrids side by side bound to different data tables and each with their own view.
The datatables both have the same number of rows, and I want both grids to maintain the same scroll position.
I am having trouble finding a way to do this using MVVM... anyone have any ideas?
Thanks! -Steven
Take a look at codeproject Scroll Synchronization
I was able to overcome this issue via some reflection hacks:
<DataGrid Name="DataGrid1" ScrollViewer.ScrollChanged="DataGrid1_ScrollChanged" />
<DataGrid Name="DataGrid2" />
and the code itself is:
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);
}
}
}
The Scroll Synchronization project doesn't work for Datagrid because it doesn't expose ScrollToVerticalOffset
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With