【发布时间】:2019-03-02 16:41:26
【问题描述】:
我正在使用大约 50 行的 WPF DataGrid。我正在使用 MVVM 模式。 用户可以在一行中搜索一些文本,datagrid 应该突出显示该行(不一定选择该行),如果该行在屏幕上尚不可见,则滚动到该行。
修整的 XAML 代码:
<DataGrid ItemsSource="{Binding MyDataView,Mode=TwoWay}" Name="myDataGrid"
AutoGeneratingColumn="Generate_Column"
CurrentCell="{Binding DGCurrentCell, Mode=OneWayToSource}" SelectedItem="{Binding SelectedRow, Mode=TwoWay}"
HorizontalScrollBarVisibility="Disabled" VirtualizingPanel.ScrollUnit="Item"
VirtualizingStackPanel.VirtualizationMode="Recycling" VirtualizingStackPanel.IsVirtualizing="False"
IsSynchronizedWithCurrentItem="True">
代码背后:
public void ScrollToItem(object gridObj, object item)
{
myDataGrid.Dispatcher.BeginInvoke((Action)(() =>
{
myDataGrid.Focus();
myDataGrid.UpdateLayout();
myDataGrid.ScrollIntoView(item);
}));
}
视图模型:
protected override bool FindItem(string searchString)
{
bool itemFound=false;
DataRow[] rows = this.MyDataTable.Select(searchString);
if (rows.Count() > 0)
{
itemFound = true;
//Scroll to the first row which is a match
(this.View as SCDataGridView).ScrollToItem(this, rows[0]);
}
return itemFound;
}
如果找到项目,则调用 ScrollToItem API,但 scrollviewer 永远不会滚动到该项目。 我尝试了以下字段的各种组合,但到目前为止没有任何帮助:
HorizontalScrollBarVisibility- Auto or Disabled
VirtualizingPanel.ScrollUnit- Pixel or Item
VirtualizingStackPanel.VirtualizationMode- Standard or Recycling
VirtualizingStackPanel.IsVirtualizing - True or False
我错过了什么?
谢谢,
RDV
【问题讨论】:
标签: wpf datagrid scrollview