2

私はWPFが初めてです。データグリッド ランタイムから行を削除したいのですが、このように行を削除しようとすると

Datagrid.Items.Remove(eRow);

「エラー: ItemsSource が使用されている間、操作は無効です。代わりに、ItemsControl.ItemsSource を使用して要素にアクセスして変更してください。」というエラーが表示されます。

ObservationCollection と InotifyPropertyChangedEvent を使用できることをオンラインで読みましたが、実装方法がわかりません。

このような削除ボタンがあります

ここに画像の説明を入力

これはデータグリッドです

    <ctrls:RhinoDataGrid x:Name="dataGrid" Grid.Row="1" Margin="5" ItemsSource="{Binding Model.CurrentDataTable}"   
                             Style="{StaticResource RhinoDataGridBaseStyle}" IsReadOnly="{Binding Model.IsLinkFile}"
                             SelectedValue="{Binding Model.CurrentDataRow}" SelectedValuePath="Row"
                              >

            </ctrls:RhinoDataGrid>

助けてください。ありがとう。

4

2 に答える 2

5

DataGrid の ItemsSource には、Model.CurrentDataTable へのバインディングがあります。行を削除する場合は、そのコレクション内のアイテムを削除する必要があります。ただし、コレクションがINotifyCollectionChangedを実装していない場合、DataGrid はその変更に気づきません。

.NET には、INotifyCollectionChanged を実装する組み込みのObservableCollectionがあります。このコレクション タイプを CurrentDataTable に使用する場合、コレクションが変更されると、DataGrid はそれ自体を更新します。

于 2012-05-12T15:18:52.077 に答える
1

WPF データ バインディングとは、ユーザー インターフェイスを直接操作することはほとんどないことを意味します。あなたがしようとしているのは、UI のグリッド コントロールから行を直接削除することです。これは、Winforms でアプローチした方法です。

WPF データ バインディングを使用すると、ユーザー インターフェイスは基になるデータに反応します。したがって、あなたの場合、グリッドは binding によって指定された ItemsSource の内容にバインドされます(または「監視」されます):Binding Model.CurrentDataTable

行を削除するには、基になるデータから行を削除する必要があり、UI に変更が自動的に反映されます。

これが、ObservableCollectionINotifyPropertyChangedのすべてです。WPF開発を行っている場合は、これらについてよく読む必要があります。

于 2012-05-12T17:16:09.650 に答える