繁体   English   中英

如何在ObservableCollection上执行CanDelete验证 <T> ?

[英]How can I do CanDelete validation on ObservableCollection<T>?

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

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

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

_items.CollectionChanged += ItemsChanged

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

更新

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

谢谢

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

AllowDelete="False"

在DataGrid中:

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

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

如果您使用其他某些技术替换了该视图,并且新的控件没有删除行选项,则可以使用按钮。 因此,您仍然可以重用ViewModel,因为按钮将绑定到DeleteOrderCommand或此命令正在调用的方法,并且您的验证位于ViewModel中,因此当您以新技术切换到View时,验证并不会消失。

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

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

  1. 解:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM