我正在使用将加载超过一千件商品的datagrid,因此我启用了虚拟化。当我尝试在后面的代码中使用Datagrid.SelectAll()选择所有时,选择工作正常。但是当我以编程方式更改隐藏项目的IsSelected属性时,向下滚动时项目不会更新。
使用SelectAll()的步骤:
使用以编程方式将IsSelected属性更新为true的步骤:
如何更新隐藏项目的IsSelected属性?
答案 0 :(得分:0)
试试这个DataGrid.UnselectAllCells();
答案 1 :(得分:0)
我通过处理选择更改中的隐藏项来解决了这个问题。这是使用MVVM模式实现的。
private void HandleContentSelection(SelectionChangedEventArgs e)
{
if (e == null) return;
var dataGrid = e.Source as DataGrid;
if (dataGrid == null) return;
#region Update Grid Selection
if (e.AddedItems != null)
{
foreach (var item in e.AddedItems.Cast<IContent>())
{
if (!item.IsSelected)
{
item.IsSelected = true;
}
}
}
if (e.RemovedItems != null)
{
_contentsToBeUnselected.Clear();
// Handle Multiple selection
// Set hidden items IsSelected property to false
if (dataGrid.SelectedItems.Count > 0 && (e.AddedItems == null || e.AddedItems.Count == 0) && e.RemovedItems.Count > 1)
{
foreach (var content in dataGrid.Items.Cast<IContent>())
{
if (!dataGrid.SelectedItems.Contains(content))
{
_contentsToBeUnselected.Add(content);
}
}
}
// Handle Unselect All
// Set hidden items IsSelected property to false
else if (dataGrid.SelectedItems.Count == 0 && (e.AddedItems == null || e.AddedItems.Count == 0))
{
_contentsToBeUnselected.AddRange(dataGrid.Items.Cast<IContent>());
}
else
{
_contentsToBeUnselected.AddRange(e.RemovedItems.Cast<IContent>());
}
foreach (var item in _contentsToBeUnselected)
{
if (item.IsSelected)
{
// if bound data item still is selected, fix this
item.IsSelected = false;
}
}
}
e.Handled = true;
#endregion
}