I just ran into a small problem with a databound
DataGrid in Silverlight. If the
SelectedItem is changed by the
ViewModel, the
DataGrid does not scroll to the
SelectedItem.
I created a behavior to do this for me. So now if the Selection of the
DataGrid is changed, the
DataGrid scolls to the
selecteditem. (It used the
ScrollIntoView method of the
DataGrid.)
namespace MVVM.Framework
{public class ScrollIntoViewBehavior : Behavior<DataGrid>
{
protected override void OnAttached()
{
base.OnAttached();
this.AssociatedObject.SelectionChanged += new SelectionChangedEventHandler(AssociatedObject_SelectionChanged);
}
void AssociatedObject_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (sender is DataGrid)
{
DataGrid grid = (sender as DataGrid);
if (grid.SelectedItem != null)
{
grid.Dispatcher.BeginInvoke(delegate
{
grid.UpdateLayout();
grid.ScrollIntoView(grid.SelectedItem, null);
});
}
}
}
protected override void OnDetaching()
{
base.OnDetaching();
this.AssociatedObject.SelectionChanged -=
new SelectionChangedEventHandler(AssociatedObject_SelectionChanged);
}
}
}
To use this in XAML: (make sure you have included
xmlns:fw="clr-namespace:MVVM.Framework" in your header).
<sdk:DataGrid AutoGenerateColumns="true" ItemsSource="{Binding ObjectList}" SelectedItem="{Binding SelectedObject, Mode=TwoWay}" Name="dataGridObjects">
<i:Interaction.Behaviors>
<fw:ScrollIntoViewBehavior/>
</i:Interaction.Behaviors>
</sdk:DataGrid>