1

我通过源属性将 ObservableCollection 绑定到 xamdatagrid。

<igDP:XamDataGrid DataSource="{Binding Path=MyCollection}" />

我可以做到的一种方法是使用

_items.CollectionChanged += ItemsChanged

但这似乎为时已晚,因为项目已经被删除。有什么好的解决方案吗?

更新

用户通过 xamdatagrid 手动删除项目。

谢谢

4

3 回答 3

2

您不应该直接在 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 方法中使用它更方便。

于 2013-09-12T08:39:24.693 回答
0
  1. 解决方案:

    我认为最好的方法是删除CommandViewModel 中带有 a 的项目。这样,您可以在命令的 CanExecute 方法中进行验证,如果无效则无法执行。您可以使用InputBindingsEventToCommand在用户交互后触发命令。

  2. 解决方案

    您可以从 ObservableCollection 继承并覆盖 RemoveItem 方法并在那里进行验证,但我建议按照上述方式进行。

于 2013-09-12T08:49:58.657 回答
0

如果要从 UI 中删除项目,则可以使用 ICommand 接口中的 CanExecute(object parameter)

于 2013-09-12T08:39:51.730 回答