質問

ビューモデルで次のコードを使用して、コレクションから項目を削除しています。

UnitMeasureCollection.CollectionChanged += new NotifyCollectionChangedEventHandler(ListOfUnitMeasureCollectionChanged);

void ListOfUnitMeasureCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
    if (e.Action == NotifyCollectionChangedAction.Remove)
    {
        if (NavigationActions.DeleteConfirmation("Delete Item.", "Are you sure you want to delete this item? This action cannot be undone."))
        {
            foreach (UnitMeasureBO item in e.OldItems)
            {
                UnitMeasureBO unitMeasureBO = item as UnitMeasureBO;
                bool inUse = unitMeasureRepository.UnitMeasureInUse(unitMeasureBO.UnitMeasureValue);
                if (inUse == true)
                {
                    NavigationActions.ShowError("Cannot delete item", "This item cannot be deleted because it is used elsewhere in the application.");
                }
                else
                {
                    unitMeasureRepository.DeleteUnitMeasure(unitMeasureBO.UnitMeasureValue);
                }
            }
        }
    }
}

コレクションにバインドされたデータグリッドがあります。確認プロンプトに基づいて削除アクションをキャンセルする方法があるかどうか疑問に思っています。NotifyCollectionChangedEventArgs には cancel メソッドがないことに気付きました。ユーザーがデータグリッドから項目を削除しても、確認で「いいえ」を選択すると、項目はデータグリッドから削除されたままになります。これはデータベースから削除されず、データグリッドが更新されると再び表示されます。私は mvvm パターンを使用していますが、データグリッドをコーディングせずにこれを行うことを好みます。助けていただければ幸いです。

役に立ちましたか?

解決

CollectionChanged イベント中に削除アクションをキャンセルすることはできません。

私のおすすめ:MVVM を使用している場合は、DataGrid で DeleteKey が押されたときにトリガーされる DeleteCommand をどこかに配置する必要があります。このコマンドの Execute() メソッドでは、次のことを行う必要があります。

  1. 確認を求めます。
  2. ユーザーが「はい」を選択した場合は、コレクションから項目を削除します。この削除は DataGrid に直接反映される必要があります。
  3. ユーザーが「いいえ」を選択した場合は、何も行いません。

ただし、基本的に行をいつ削除するかを制御する必要があるため、DataGrid.CanUserDeleteRows は False に設定されることを意味します。

お役に立てれば。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top