我使用的是WPF DataGrid,我的单元格的IsSelected属性绑定到模型中的数据。如果在数据网格(VirtualizingStackPanel.IsVirtualizing="False"
)上关闭虚拟化,这可以正常工作。
但是,只要我打开虚拟化,向下滚动就会看到虽然在代码中选择了一些单元格但不再选中它们。
我必须使用虚拟化,因为没有它我的数据网格加载太慢了。有没有人对如何解决这个问题有任何建议?
更新:
我的代码(我在b / c后面的代码中绑定我不知道在运行时需要多少列):
for (int i = 0; i < this.CurrentData.Data[0].Length; i++)
{
TheGrid.Columns.Add(
new DataGridTextColumn
{
Header = (this.CurrentData.Rank > 1) ? string.Format(this.culture, headerFormatString, i + 1) : string.Empty,
Binding = new Binding(string.Format("[{0}].DataValue", i)) { ValidatesOnDataErrors = true, UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged },
Width = DataGridLength.Auto,
ElementStyle = new Style
{
TargetType = typeof(TextBlock),
Triggers = { this.errorTrigger }
},
EditingElementStyle = new Style
{
TargetType = typeof(TextBox),
Triggers = { this.errorTrigger }
},
CellStyle = new Style
{
TargetType = typeof(DataGridCell),
Setters =
{
new Setter
{
Property = DataGridCell.IsSelectedProperty,
Value = new Binding(string.Format("[{0}].IsSelected", i)) { Mode = BindingMode.TwoWay, UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged },
}
},
}
});
}
和我的IsSelected属性:
private bool isSelected = false;
public bool IsSelected
{
get
{
return this.isSelected;
}
set
{
this.isSelected = value;
OnPropertyChanged("IsSelected");
}
}
答案 0 :(得分:0)
查看您的代码,似乎单元格级别选择具有共享源IsSelected
属性,并且每个单元格都会尝试更新此属性(由于TwoWay
绑定)从而影响共享相同源绑定的所有其他小区。
您需要修改此代码。
您可以在其中发布IsSelected
类的代码吗?也许我们可以改变这个数据网格的设置方式。
答案 1 :(得分:0)
当我将VirtualizationMode设置为Standard时,似乎解决了这个问题。
@Blam获得了建议,但由于他还没有将其作为答案发布,但我发帖了。如果@Blam发布他的答案而不是评论,我会接受正确的,但在此之前,我将此标记为正确,以帮助未来的用户。