Пример проблемы:
Каркас: WPF
Визуальный контроль: DataGrid от CodePlex
public Window()
{
InitializeComponent();
var listView = new ListCollectionView(
new[]
{
new
{
Bool = false,
Str = "Value1"
},
new
{
Bool = false,
Str = "Value1"
}
}.ToList());
dataGrid.ItemsSource = listView;
listView.MoveCurrentToFirst();
listView.MoveCurrentToNext();
}
Курсор DataGrid не меняет положение на 1, если изменить значение одного из анонимных типов:
var listView = new ListCollectionView(
new[]
{
new
{
Bool = false,
Str = "Value1"
},
new
{
Bool = false,
Str = "Value2"
}
}.ToList());
Курсор работает правильно и SelectedIndex = 1.
Я думаю, что это происходит из-за переопределения анонимного объекта GetHashCode ()
Для анонимного объекта GetHashCode: сумма всех полей. Если поля одинаковы для 2 разных экземпляров анонимных объектов, GetHashCode () вернет одинаковое значение для обоих экземпляров.
Возможно, DataGrid внутренне сравнивает объекты с помощью GetHashCode и не меняет SelectedPosition.
Кто-нибудь знает, как избежать этой проблемы?
Присвоение анонимных объектов DataGrid является обязательным требованием, я не могу создавать строго типизированные объекты, что означает, что мне нужно создать оболочку для объекта и автоматически сгенерировать столбцы:
public class ViewItemHodler
{
public object ViewItem { get; set; }
}
Спасибо