#c# #wpf #datagrid
#c# #wpf #datagrid
Вопрос:
У меня есть сетка данных, в которой я переместил пустую строку для ввода пользователем в начало с помощью
((IEditableCollectionView)MyGrid.Items).NewItemPlaceholderPosition =
NewItemPlaceholderPosition.AtBeginning;
Но когда пользователь вводит новую строку, строка переходит на дно (иногда за пределы экрана) без какой-либо обратной связи, и пользователь может подумать, что его новая строка просто исчезла. Поэтому я хотел бы поместить ее сверху.
Я хочу сделать что-то вроде
MyGrid.Insert(0, newRow);
Но я не знаю, что переопределить, чтобы получить доступ к строке по мере ее поступления в DataGrid. Прямо сейчас я явно не помещаю введенную пользователем строку в DataGrid, это происходит автоматически.
Комментарии:
1. У вас есть ItemsSource?
2. Да, мой ItemsSource является ObservableCollection.
3. Итак, вставьте элемент в свой ItemsSource так же, как вы это делали в своих Items ..
4. У меня нет элемента для вставки. Пользователь вводит ее в пустую строку в таблице данных, и она автоматически вводится. Я не уверен, как получить доступ к их новой строке до ее ввода.
5. Как это происходит? Является ли это встроенной функцией DataGrid?
Ответ №1:
Вот пример:
public ObservableCollection<MyDataItem> DataItems
{
get
{
List<MyDataItem> items = new List<MyDataItem>(5);
for (int i = 0; i < 5; i )
{
items.Add(new MyDataItem { abc = abc[i], qrt = qrt[i], xyz = xyz[i] });
}
var observable = new ObservableCollection<MyDataItem>(items);
var view = CollectionViewSource.GetDefaultView(observable) as IEditableCollectionView;
view.NewItemPlaceholderPosition = NewItemPlaceholderPosition.AtEnd;
return observable;
}
}
XAML :
<DataGrid ItemsSource="{Binding DataItems}" CanUserAddRows="True" />