Wpf Datagrid删除行问题

时间:2012-05-12 14:43:55

标签: wpf datagrid delete-row

我是WPF的新手。我想从datagrid运行时删除行。当我尝试删除这样的行

Datagrid.Items.Remove(eRow);

它给出了一个错误“错误是:在使用ItemsSource时操作无效。请改为使用ItemsControl.ItemsSource访问和修改元素。”

我在网上看到你可以使用ObservationCollection和InotifyPropertyChangedEvent,但我不知道如何实现它。

我已经删除了这样的按钮

enter image description here

这是datagrid

    <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>

请帮助我。感谢。

2 个答案:

答案 0 :(得分:5)

您的DataGrid的ItemsSource在Model.CurrentDataTable上有一个绑定。如果要删除行,则必须删除该集合中的项目。但是,如果集合没有实现INotifyCollectionChanged,DataGrid将不会注意到该修改。

.NET有一个内置ObservableCollection,它实现了INotifyCollectionChanged。如果对CurrentDataTable使用此集合类型,则在修改集合时,DataGrid将自行更新。

答案 1 :(得分:1)

WPF数据绑定意味着您很少直接操作用户界面。您要做的是直接从UI上的网格控件中删除该行,这就是您在Winforms中处理事物的方式。

使用WPF数据绑定,用户界面会对底层数据做出反应。因此,在您的情况下,网格绑定(或“观察”)绑定指定的ItemsSource的内容:Binding Model.CurrentDataTable

要删除行,您需要将其从基础数据中删除,UI将自动反映更改。

这就是ObservableCollectionINotifyPropertyChanged的全部内容 - 如果您正在进行WPF开发,真的需要阅读它们!