- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个 DataGrid
绑定(bind)到 EmployeeDataTable
属性。让我们考虑 EmployeeDataTable
的行数是 50 。也就是说,DataGrid
有 50 行。
private DataTable employeeDataTable;
public DataTable EmployeeDataTable
{
get { return employeeDataTable; }
set {
employeeDataTable = value;
OnPropertyChanged("EmployeeDataTable");
}
}
我想要的是当用户滚动到 DataGrid
的底部或顶部(50 行)并且只有 5 行可以看到(在顶部或在顶部),然后我想将接下来的 20 个项目添加到 DataGrid
(如果用户滚动到顶部,则添加到 Datagrid 的顶部;如果用户滚动到底部,则添加到底部)。
也就是说,当用户看到 DataGrid
的第四十五 (45) 行或第五 (5) 行时,我想运行一个名为 GetNewData()
的方法.是否可以不使用 SelectedItem
属性?(只需使用 Scroll
)
private void GetNewData()
{
for (int i = 0; i < 20; i++)//Adding 20 DataRows
{
var theRow = employeeDataTable.NewRow();
for (int j = 0; j < 10; j++)
{
theRow[j] = "o";
}
Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, new Action(() =>
{
employeeDataTable.Rows.Add(theRow);
}));
}
}
当用户在 DataGrid
中向下滚动或向上滚动时,我的方法 GetNewData()
会在后台线程中加载新数据。就像分页一样,但没有“下一页”和“上一页”按钮(我不能使用按钮)。
我已经尝试处理许多事件,例如 DataGrid
的 MouseWheel
或 MouseMove
但没有结果。任何帮助将不胜感激。
最佳答案
您需要做的是将数据网格包装在 ScrollableView
中并注册到 ScrollChanged
事件:
<ScrollViewer VerticalScrollBarVisibility="Visible"
PreviewMouseWheel="UIElement_OnPreviewMouseWheel"
ScrollChanged="ScrollViewer_OnScrollChanged">
<DataGrid x:Name="dg" VerticalScrollBarVisibility="Disabled"></DataGrid>
</ScrollViewer>
接下来,您实现 ScrollChanged
事件以检查您是否位于 ScrollView
的底部,如果是,则添加一些行。
private void ScrollViewer_OnScrollChanged(object sender, ScrollChangedEventArgs e)
{
var sv = sender as ScrollViewer;
if (sv != null && !_addingData)
{
if (sv.ScrollableHeight - e.VerticalOffset == 0)
{
_addingData = true;
GetNewData();
_addingData = false;
}
}
}
private void UIElement_OnPreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
ScrollViewer scv = (ScrollViewer)sender;
scv.ScrollToVerticalOffset(scv.VerticalOffset - e.Delta);
e.Handled = true;
}
如果您像这样注册数据网格,则无需向您的 EmployeeDataTable
添加任何可观察的内容:
dg.AutoGenerateColumns = true;
dg.ItemsSource = EmployeeDataTable.DefaultView;
编辑:已更新以启用鼠标滚轮滚动。
关于c# - 当只有 5 行可供查看时将数据加载到 DataGrid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34105304/
Windows Phone 8 上的开发人员可以使用两个命名空间 - Microsoft.Devices.Sensors 和 Windows.Devices.Sensors。它们几乎完全相同。有人能解
如何使 NameValueCollection 可供 LINQ 查询运算符(例如 where、join、groupby)访问? 我尝试了以下方法: private NameValueCollectio
我希望能够测试哪些文本转语音可供我的 iOS 应用程序与 AVSpeechSynthesis 一起使用。生成已安装声音的列表很容易,但 Apple 将其中一些声音禁止应用程序使用,我想知道哪些声音。
我让 postgres.app 在我的 Mac 上本地运行,并希望我的本地 docker 容器能够连接到它。我该如何最好地做到这一点? 我发现这篇文章建议使用 --add-host 标志(Host p
我有一个包含多个 HTML 文件的文件夹。每个 HTML 文件都使用 AngularJS 并包含相同的声明,如下所示;
与仍然生活在 ant 构建环境世界(在 Windows 机器上)的客户合作。想要在 Java 程序中使用 google-cloud-translate 库,但如果我包含 google-cloud-tr
我是一名优秀的程序员,十分优秀!