using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
namespace TestDataGrid;
///
/// Interaction logic for MainWindow.xaml
///
public partial class MainWindow
{
public MainWindowViewModel ViewModel
{
get => DataContext as MainWindowViewModel;
set => DataContext = value;
}
public MainWindow()
{
InitializeComponent();
}
private void Digit_OnPreviewTextInput(object sender, TextCompositionEventArgs e)
{
e.Handled = "0123456789".IndexOf(e.Text, StringComparison.Ordinal) < 0;
}
public void RefreshFromTopAndRestorePosition(Action updateData)
{
var scrollViewer =
FindVisualChild(BusinesDataGrid);
if (scrollViewer == null)
{
updateData();
return;
}
var verticalOffset = scrollViewer.VerticalOffset;
var horizontalOffset = scrollViewer.HorizontalOffset;
scrollViewer.ScrollToTop();
BusinesDataGrid.UpdateLayout();
updateData();
BusinesDataGrid.UpdateLayout();
scrollViewer =
FindVisualChild(BusinesDataGrid);
if (scrollViewer == null)
return;
var restoredVerticalOffset = Math.Min(
verticalOffset,
scrollViewer.ScrollableHeight);
var restoredHorizontalOffset = Math.Min(
horizontalOffset,
scrollViewer.ScrollableWidth);
scrollViewer.ScrollToVerticalOffset(
restoredVerticalOffset);
scrollViewer.ScrollToHorizontalOffset(
restoredHorizontalOffset);
BusinesDataGrid.UpdateLayout();
}
private static T? FindVisualChild(
DependencyObject parent)
where T : DependencyObject
{
for (var i = 0;
i < VisualTreeHelper.GetChildrenCount(parent);
i++)
{
var child =
VisualTreeHelper.GetChild(parent, i);
if (child is T result)
return result;
var descendant =
FindVisualChild(child);
if (descendant != null)
return descendant;
}
return null;
}
}