DataGrid
に新しいレコードが入力された後に新しい空の行が作成されないという問題が発生しました。ObservableCollectionの更新後にDatagrid編集で新しい行がありません
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です::
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>
を更新するための私のコードです
<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`は、新しい行を追加する必要があり、正常に動作しますが、これは、それが何をするかです。これは、それが何をするかである
、
しかし、CalculationTableGrid_OnCellEditEnding
イベントでこの行CollectionLists.CalculationTableSourceCollection(CalculationTblSourceObserv, @"section", @"sectionAll");
をコメントアウトすると、新しいレコードが行われた後、それが正しく動作するように、空の行が追加されることができ、以下を参照してください:
ここで何が起きているのか、私はこれが正常に動作しない場合は、任意の助けもいただければ幸いです。
問題は、新しい項目が追加されたときにCellEditEndingイベントが発生し、CalculationTableSourceCollectionメソッドですぐにクリアされるということです。なぜCellEditEndingイベントハンドラのCalculationTableSourceCollectionメソッドを呼び出していますか? – mm8
@ mm8、コレクションを更新します。私はあなたが何かを変えるたびにあなたが更新されるはずだったと思った? – KyloRen
@ mm8、ああ、私が間違っていたのを見る。あなたは絶対に正しいです! – KyloRen