Я использую WPF DataGrid, и у меня есть свойство IsSelected ячеек, привязанных к данным в моей модели.Это прекрасно работает, если виртуализация отключена на сетке данных (VirtualizingStackPanel.IsVirtualizing="False"
).
Однако, как только я включаю виртуализацию, прокручивая вниз, я вижу, что некоторые ячейки больше не выделены, хотя они были выделены в коде.
Я должен использовать виртуализацию, потому что без нее загрузка сетки данных будет ОЧЕНЬ медленной.У кого-нибудь есть какие-либо предложения относительно того, как решить эту проблему?
ОБНОВЛЕНО:
Мой код (я связываю код за б / к, я не знаю, сколько столбцов мне нужно до времени выполнения):
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");
}
}