0

DataGridを使用してユーザーにデータを表示しています。

ユーザーがデータを編集して新しい行を追加できるようにしています。の組み込み機能を使用してCanUserDeleteRows、ユーザーが追加したばかりの行のみを削除できるようにすることは可能ですか。

したがって、ユースケースの説明:

1)ユーザーがdatagridを開きます2)datagridがその内容を表示します3)ユーザーがいくつかの行を追加します4)ユーザーが追加した行の1つ(またはすべて)を削除します。5)ユーザーは、データグリッドが最初にロードされたときにデータグリッドにあった行を削除できません

...したがって、「新しい」行のみを削除できるようにする必要があります。ここではどのようなアプローチが最適ですか?私は今のところ少しアイデアがありません...

更新:あなたのコメントを満足させるために;)

カスタムクラスのObservableCollectionを使用してデータグリッドを埋めています。したがって、「問題」は、delete-eventを「インターセプト」する方法も、mvvm-patternを壊さずにそれを行う方法も実際にはわからないということです。

4

2 に答える 2

0

2つの選択肢があります:

1 `Disconnected Mode`

新しい行をキャッシュに保存しますGetChanges。追加された行を取得するには、メソッドを使用します。

//GetChanges return added rows before update datasource from caching
var newRows = YourDataTable.GetChanges(DataRowState.Added);

別のデータ列を追加し、新しい行を追加するたびにこの列の値を設定します。

DataColumn columnFlag = new DataColumn("FlagDelete", typeof(bool));

Delete Buttonvisible列の値に応じて

</ p>

2 `Connected Mode` 

データベースに新しい列を作成し、データを取得するためのサーバー呼び出しを実現し、列フラグの値に従って関数の削除を視覚化します

于 2012-10-01T15:52:01.613 に答える
0

ObservableCollectionsなどを使用しているので、Aghilas Yakoubの回答に少し基づいて、実用的なアプローチを使用しました。

IsNew可視性が-Propertyにバインドされる削除ボタンをDataGridに追加しました。

<DataGridTemplateColumn>
   <DataGridTemplateColumn.CellTemplate>
      <DataTemplate>
          <Button Content="Remove" Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TabControl}}, Path=DataContext.BottomDetailVM.DeleteCommand}" Visibility="{Binding IsNew, Converter={StaticResource Bool2VisibilityConverter}, FallbackValue=Collapsed}" CommandParameter="{Binding}" />
      </DataTemplate>
   </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

ユーザーがボタンをクリックすると、現在のオブジェクト(行に表示されている)をパラメーターとしてコマンドが実行されます。

public ICommand DeleteRangfolgeCommand
{
  get
  {
     return new ActionCommand<MyOwnViewModel>(ExecuteDelete);
  }
}

private void ExecuteDelete(MyOwnViewModel viewModelToDelete)
{
    this.ItemsSourceList.Remove(viewModelToDelete);
}

ところで:私はMSDN-MagazineRelayCommandの-implementation(私の場合はActionCommandと呼ばれます)を使用しています。

于 2012-10-05T10:38:28.977 に答える