У меня возникла проблема с DataGrid
, не создавая новую пустую строку после ввода новой записи.Нет новой строки с Datagrid Редактирование после обновления ObservableCollection
Возможно, это произошло после обновления ObversableCollection<T>
.
Я использую это для привязки к коллекции:
public partial class MainWindow : INotifyPropertyChanged
{
public MainWindow()
{
DataContext = this;
InitializeComponent();
CollectionLists.CalculationTableSourceCollection(CalculationTblSourceObserv, @"section", @"sectionAll");
CalculationTableGrid.ItemsSource = CalculationTblSourceObserv;
}
public ObservableCollection<CalculationListTbl> CalculationTblSourceObserv { get; set; }
= new ObservableCollection<CalculationListTbl>();
}
Это мой код для обновления моего ObversableCollection<T>
:
class CollectionLists
{
public static void CalculationTableSourceCollection(ObservableCollection<CalculationListTbl> observable,
string section, string sectionAll)
{
using (DatabaseDataContext dataContext = new DatabaseDataContext(MainWindow.InstanceConnectionString))
{
observable.Clear();
var source = DatabaseQueries.CalculationTableSourceAll(sectionAll, dataContext);
if (source == null) return;
foreach (var item in source)
{
observable.Add(item);
}
}
}
}
И это XAML:
<DataGrid x:Name="CalculationTableGrid" Grid.Column="2"
AutoGenerateColumns="False" ItemsSource="{Binding}"
Grid.Row="1" Grid.RowSpan="12" AlternationCount="2"
CanUserAddRows="True" CanUserSortColumns="False"
CanUserDeleteRows="True" GridLinesVisibility="None"
CellEditEnding="CalculationTableGrid_OnCellEditEnding"
VerticalAlignment="Top">
<DataGrid.Columns>
<DataGridTextColumn Width="*" Header="項目"
Binding="{Binding UpdateSourceTrigger=PropertyChanged, Path=ListItems, Mode=TwoWay}" />
</DataGrid.Columns>
</DataGrid>
И Я использую этот метод для обновления dataGrid
:
private void CalculationTableGrid_OnCellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
ShiftTypeData.UserInputData.AddNewDataShiftInputRecords(e, MainUserId, EmployeesNameNumberPairsAll, CalculationTblListObserv, DateFilter);
CollectionLists.CalculationTableSourceCollection(CalculationTblSourceObserv, @"section", @"sectionAll");
}
Так что все работает нормально, то DataGrid' is updated, the database is correctly updated and the
ObversableCollection is updated. However the
DataGrid` следует добавить новую строку после того, как новая запись вставляется, но это то, что он делает.
Это то, что он делает,
Однако, комментируя эту линию CollectionLists.CalculationTableSourceCollection(CalculationTblSourceObserv, @"section", @"sectionAll");
в CalculationTableGrid_OnCellEditEnding
случае позволяет ему вести себя правильно и пустая строка добавляется после того, как новая запись сделана, смотрите ниже :
что здесь происходит, я не могу получить эту работу правильно, любая помощь будет оценена.
Проблема в том, что событие CellEditEnding будет поднято при добавлении нового элемента, а затем вы сразу очистите его в методе CalculationTableSourceCollection ... почему вы даже вызываете метод CalculationTableSourceCollection в обработчике событий CellEditEnding? – mm8
@ mm8, чтобы обновить коллекцию. Я думал, вы должны обновлять каждый раз, когда вы что-то меняете? – KyloRen
@ mm8, ahhh, я вижу, что я сделал не так. Вы абсолютно правы !!! – KyloRen