DragDropManager如何防止将传入元素添加到列表?

时间:2014-03-03 03:18:52

标签: c# wpf drag-and-drop grid telerik

目前我的页面由两个网格并排组成,每个网格绑定一个列表,表示 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方法之后立即执行什么?

1 个答案:

答案 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,它停止了操作,我现在可以在其中实现自己的逻辑