0

CanUserAddRows を true に設定した wpf データグリッドがあります。これにより、空白の空の行がデータグリッドに追加され、ユーザーが行をダブルクリックすると、すべてのプロパティがゼロになり、コレクション/itemsource(ObservableCollection) に追加されます。問題は、空の行がゼロになってコレクションに追加されるときです。前の行が追加されてゼロになるとすぐに、別の空白行を追加して使用できるようにする必要があります。代わりに、新しい行 (selectionchange) を選択するまで、新しい空白行はデータグリッドに表示されません。これが何を求めているのかが明確であることを願っています。これを修正する方法についてのアイデアはありますか? どんな入力でもThx。

  <DataGrid Grid.Row="1" RowHeaderWidth="0" BorderBrush="Black" ItemsSource="{Binding MyCollection, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" SelectedItem="{Binding SelectedRow, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" Height="280" Focusable="True" CanUserAddRows="True">

       <DataGridTextColumn Binding="{Binding Weight}" Header="Tare Lbs." Width="70" />
       <DataGridTextColumn Binding="{Binding Bu, UpdateSourceTrigger=PropertyChanged}" Header="Gross Bu." Width="70" />
4

1 に答える 1

1

If you call DataGrid.CommitEdit() it will finish with the adding of the new row and create the new blank row for you. We do it in DataGrid.CurrentCellChanged().

XAML

<DataGrid x:Name="theGrid" ItemsSource="{Binding MyCollection, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" SelectedItem="{Binding SelectedRow, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" CanUserAddRows="True" CurrentCellChanged="theGrid_CurrentCellChanged">

Code Behind:

private void theGrid_CurrentCellChanged(object sender, EventArgs e)
{
   DataGrid grid = sender as DataGrid;

   IEditableCollectionView items = (IEditableCollectionView)grid.Items;
   if (items != null && items.IsAddingNew) {
      // Commit the new row as soon as the user starts editing it
      // so we get a new placeholder row right away.
      grid.CommitEdit(DataGridEditingUnit.Row, false);
  }
}
于 2013-04-09T00:00:26.240 に答える