ฉันประสบปัญหากับการ 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