如何在ObservableCollection <t>?</t>上进行CanDelete验证

时间:2013-09-12 08:32:37

标签: c# wpf observablecollection xamdatagrid

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

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

我能做到的一种方法是使用

_items.CollectionChanged += ItemsChanged

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

更新

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

由于

3 个答案:

答案 0 :(得分:1)

您不应该直接在网格中删除行,UI不负责执行业务操作,这应该由ViewModel执行,然后ViewModel应该进行验证。

AllowDelete="False"
DataGrid中的

<DataGrid.InputBindings>
    <KeyBinding Key="Delete" Command="{Binding DeleteOrderCommand}" />
</DataGrid.InputBindings>

在视图模型上,您将拥有DeleteOrderCommand。

如果您使用其他技术替换此View,并且新控件没有删除行选项,则可以使用按钮。所以你仍然可以重用你的ViewModel,因为按钮会绑定到DeleteOrderCommand或者这个命令调用的方法,你的验证也在ViewModel中,所以当你切换到新技术中的View时它没有消失。

更新: 您可以在DeleteOrderCommand上使用CanExecute进行验证,或者在Command的Execute方法中更方便。

答案 1 :(得分:0)

如果要从UI中删除项目,可以使用ICommand界面中的CanExecute(对象参数)

答案 2 :(得分:0)

  1. 解决方案:

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

  2. 解决方案

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