Примера проблемы:WPF ListBox ListCollectionView анонимного типа навигация проблема
Структура: 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();
}
сетка данных курсор не изменяет положение 1, если изменить значение одного из анонимных типов:
var listView = new ListCollectionView(
new[]
{
new
{
Bool = false,
Str = "Value1"
},
new
{
Bool = false,
Str = "Value2"
}
}.ToList());
Курсор работает правильно и SelectedIndex = 1.
Я думаю, что это происходит из-за анонимного переопределения объекта GetHashCode() Для анонимного объекта GetHashCode: сумма всех полей. Если поля одинаковы для двух разных экземпляров анонимных объектов, GetHashCode() вернет одинаковое значение для обоих экземпляров.
Возможно, DataGrid внутренне сравнивает объекты с использованием GetHashCode и не меняет SelectedPosition.
Кто-нибудь знает, как избежать этой проблемы? Назначения анонимных объектов для DataGrid является обязательным требованием, я не могу создать строго типизированные объекты, а это значит, что я должен создать оболочку для объекта и автоматической генерацией столбцов:
public class ViewItemHodler
{
public object ViewItem { get; set; }
}
Благодарность