我通过source属性将ObservableCollection绑定到xamdatagrid。
<igDP:XamDataGrid DataSource="{Binding Path=MyCollection}" />
我能做到的一种方法是使用
_items.CollectionChanged += ItemsChanged
但这似乎为时已晚,因为物品已被删除。它有什么好的解决方案吗?
更新
用户通过xamdatagrid手动删除项目。
由于
答案 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)
解决方案:
我认为最好的方法是在ViewModel中删除Command
的项目。这样,您可以在命令的CanExecute方法中进行验证,如果它无效,则无法执行。
您可以使用InputBindings或EventToCommand在用户互动后触发命令。
解决方案
您可以从ObservableCollection继承并覆盖RemoveItem方法并在那里进行验证,但我建议按照上述方式进行验证。