目前我的页面由两个网格并排组成,每个网格绑定一个列表,表示 GridA 绑定 ListA 和 GridB 绑定的数组listB
两个网格都实现了Telerik DragDropManager
。在大多数情况下,一切正常,用户可以直接从 GridA 拖动元素并放在 GridB 上,并且 ListA 和 ListB 将相应地反映。
现在我正在尝试检查 GridB ,以便每当用户从 GridA 拖动元素时,如果此元素存在于 GridB ,不会添加元素。
我注意到我可以在 GridB 中实现drop
功能,如下所示:
<telerik:RadGridView
ItemSource="{Binding ListB}"
DataContext="{Binding [someViewModel]}"
Drop="abc_Drop"
DataLoaded="abc_DataLoaded"
x:Name="GridB">
以下将是我的drop
功能:
private void abc_Drop(object sender, System.Windows.DragEventArgs e)
{
var selectedItem = (T)GridA.SelectedItem;
List<T> x = someViewModel.ListB;
}
为了调查,我在abc_Drop
方法上设置了一个断点。我发现,当我执行abc_Drop
方法时,someViewMode.ListB.Count()
仍会返回0
,但一旦完成,someViewModel.ListB.Count()
将返回1
。因此我的问题是,我应该在哪里进行检查并有条件地阻止元素添加到列表中?在drop
方法之后立即执行什么?
答案 0 :(得分:0)
我自己找到了答案。
private void abc_Drop(object sender, System.Windows.DragEventArgs e){
e.Handled = true;
var selectedItem = (T)GridA.SelectedItem;
if( /*condition*/ ){
ListB.Add(selectedItem);
}
GridB.Rebind();
}
通过使用e.Handled = true
,它停止了操作,我现在可以在其中实现自己的逻辑