我通过源属性将 ObservableCollection 绑定到 xamdatagrid。
<igDP:XamDataGrid DataSource="{Binding Path=MyCollection}" />
我可以做到的一种方法是使用
_items.CollectionChanged += ItemsChanged
但这似乎为时已晚,因为项目已经被删除。有什么好的解决方案吗?
更新
用户通过 xamdatagrid 手动删除项目。
谢谢
我通过源属性将 ObservableCollection 绑定到 xamdatagrid。
<igDP:XamDataGrid DataSource="{Binding Path=MyCollection}" />
我可以做到的一种方法是使用
_items.CollectionChanged += ItemsChanged
但这似乎为时已晚,因为项目已经被删除。有什么好的解决方案吗?
更新
用户通过 xamdatagrid 手动删除项目。
谢谢
您不应该直接在 Grid 中删除行,UI 不负责执行业务操作,这应该由 ViewModel 执行,并且在 ViewModel 应该进行验证之前。
AllowDelete="False"
在数据网格中:
<DataGrid.InputBindings>
<KeyBinding Key="Delete" Command="{Binding DeleteOrderCommand}" />
</DataGrid.InputBindings>
在视图模型上,您将拥有 DeleteOrderCommand。
如果您将此视图替换为其他技术并且新控件没有删除行选项,您将使用按钮。因此,您仍然可以重用您的 ViewModel,因为按钮将绑定到 DeleteOrderCommand 或此命令正在调用的方法,并且您的验证在 ViewModel 中,因此当您切换到新技术中的 View 时它并没有消失。
更新:您可以在 DeleteOrderCommand 上使用 CanExecute 进行验证,或者在 Command 的 Execute 方法中使用它更方便。
解决方案:
我认为最好的方法是删除Command
ViewModel 中带有 a 的项目。这样,您可以在命令的 CanExecute 方法中进行验证,如果无效则无法执行。您可以使用InputBindings或EventToCommand在用户交互后触发命令。
解决方案
您可以从 ObservableCollection 继承并覆盖 RemoveItem 方法并在那里进行验证,但我建议按照上述方式进行。
如果要从 UI 中删除项目,则可以使用 ICommand 接口中的 CanExecute(object parameter)