Saya mengalami masalah dengan DataGrid
tidak membuat baris kosong baru setelah catatan baru dimasukkan.
Tampaknya hanya terjadi setelah memperbarui ObversableCollection<T>
.
Saya menggunakan ini untuk mengikat ke koleksi:
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>();
}
Ini kode saya untuk memperbarui ObversableCollection<T>
saya:
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);
}
}
}
}
Dan ini XAMLnya:
<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>
Dan saya menggunakan metode ini untuk memperbarui dataGrid
:
private void CalculationTableGrid_OnCellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
ShiftTypeData.UserInputData.AddNewDataShiftInputRecords(e, MainUserId, EmployeesNameNumberPairsAll, CalculationTblListObserv, DateFilter);
CollectionLists.CalculationTableSourceCollection(CalculationTblSourceObserv, @"section", @"sectionAll");
}
Jadi semuanya berfungsi dengan baik, DataGrid' is updated, the database is correctly updated and the
ObversableCollectionis updated. However the
DataGrid` harus ditambahkan baris baru setelah catatan baru dimasukkan, tetapi inilah fungsinya.
Inilah yang dilakukannya,
Namun, mengomentari baris CollectionLists.CalculationTableSourceCollection(CalculationTblSourceObserv, @"section", @"sectionAll");
ini di acara CalculationTableGrid_OnCellEditEnding
memungkinkannya berperilaku dengan benar dan baris kosong ditambahkan setelah rekor baru dibuat, lihat di bawah:
Apa yang terjadi di sini, saya tidak dapat menjalankannya dengan benar, bantuan apa pun akan sangat kami hargai.
ObservableCollection<T>
ketikaINotifyPropertyChanged
dipanggil, karena tampaknya metode sayaCalculationTableSourceCollection
tidak diperlukan untuk menambah dan menghapus item dari koleksi, seperti ketikaINotifyPropertyChanged
dipanggil, itu berubah ke koleksi untuk Anda . (Itu jika pemahaman saya benar) - person KyloRen   schedule 09.02.2017