У меня возникла проблема с тем, что DataGrid
не создает новую пустую строку после ввода новой записи.
Кажется, это происходит только после обновления файла 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
ObversableCollectionis updated. However the
DataGrid` должна быть добавлена новая строка после вставки новой записи, но это то, что она делает.
Это то, что он делает,
Однако закомментирование этой строки CollectionLists.CalculationTableSourceCollection(CalculationTblSourceObserv, @"section", @"sectionAll");
в событии CalculationTableGrid_OnCellEditEnding
позволяет корректно вести себя, и после создания новой записи добавляется пустая строка, см. ниже:
Что здесь происходит, я не могу заставить это работать правильно, любая помощь будет очень признательна.
ObservableCollection<T>
при вызовеINotifyPropertyChanged
, так как кажется, что мой методCalculationTableSourceCollection
не нужен как для добавления, так и для удаления элементов из коллекции, например, когда при вызовеINotifyPropertyChanged
он изменяется на коллекцию для вас . (это если я правильно понял) - person KyloRen   schedule 09.02.2017