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 有一个内置的ObservableCollection,它实现了 INotifyCollectionChanged。如果将此集合类型用于 CurrentDataTable,则 DataGrid 将在修改集合时自行更新。

于 2012-05-12T15:18:52.077 回答
1

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

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

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

这就是ObservableCollectionINotifyPropertyChanged的​​全部意义所在——如果您正在进行 WPF 开发,您真的需要阅读它们!

于 2012-05-12T17:16:09.650 回答