3

バインドされたコレクション内のすべてのアイテムを削除した後、datagrid.items.count は 1 になり、アイテム コレクション内の唯一のアイテムは newitemplaceholder ですが、データグリッドには newitemplaceholder が表示されません。これは、最後のアイテムが newitemplaceholder であり、それを編集しようとして、Enter キーを押す代わりに、削除イベントを発生させるボタンをクリックした場合にのみ発生する可能性があります。

edit イベントにより、選択された項目は newitemplaceholder ではなくなるため、この項目は sourcecollection 内の新しい項目と見なされます。

削除が呼び出される前に、データグリッドに 2 の item.count があります。

この奇妙な状況で newitemplaceholder を表示する方法について何か助けはありますか?

4

1 に答える 1

0

私は同じ問題に直面しました。さらに、ソース コレクション カウントが 0 の場合だけでなく、編集状態の最後の行でも発生しました。編集状態から削除すると、グリッドの下部にある新しいレコード行が消えます。これよりも優れたものは見つかりませんでした-かなり失礼で、あまり高速ではない解決策ですが、少なくとも私にとっては機能し、現在は何もないよりはましです。

grItems という名前の DataGrid、データ グリッド バインドに使用される Items プロパティを持つプライベート ビュー モデル参照 _vm を考えると、サンプル コードは次のようになります。

 <DataGrid Name="grItems"
        ItemsSource="{Binding Path=Items}" 
        UnloadingRow="DataGridUnloadingRow">

コードビハインド:

    private void DataGridUnloadingRow(object sender, DataGridRowEventArgs e)
    {
        grItems.UnloadingRow -= DataGridUnloadingRow;
        grItems.ItemsSource = null;
        grItems.ItemsSource = _vm.Items;
        grItems.UnloadingRow += DataGridUnloadingRow;
    } 

アップデート

後で、グリッドをスクロールする必要があるときにこれが機能しないことに気付きました.WPFの内部エラー「オフセットと長さが範囲外でした...」が発生していました。前に、項目リストと同じレベルで定義されたコマンドにバインドされた行ごとの削除ボタンがありました。そのため、コマンドを削除し、ビューでコード ビハインドを少し汚いトリックで使用する必要がありました。ビュー モデル コレクションからアイテムを削除する前に、グリッドのどこかにフォーカスを移動し、削除後にフォーカスを戻します。私の理解では、このトリックは新しく追加された行のある種の「コミット」を実行し、編集状態ではない行に対して削除アクションが実行されます。

于 2014-10-30T21:59:06.107 に答える