【问题标题】:Drag & Drop to Reorder items within listbox wpf拖放以重新排序列表框 wpf 中的项目
【发布时间】:2012-03-03 02:33:26
【问题描述】:

我有一个列表框,其中显示了一些房地产属性,这些属性是我存储在本地数据库中的对象。列表框使用简单的数据绑定绑定到该数据库。我想实现一个拖放系统,以允许用户相应地重新排列项目。但是,无论我尝试在互联网上找到哪种实现,重新排列都不起作用。我已经尝试了至少 5 个不同的版本,它们都允许我拖动对象、显示幽灵装饰器,甚至显示列表框项将落下的线,但在释放鼠标按钮后,项目根本不会移动。没有错误,什么都没有。这是我的列表框代码,我希望它是一些愚蠢的代码,可以防止这种情况发生:

<ListBox Height="424" 
        Margin="24,80,0,0" 
        x:Name="listBoxProperties"
        VerticalAlignment="Top"  ItemTemplate="{StaticResource propertySummaryTemplate}"
        IsSynchronizedWithCurrentItem="True"            
        local:DragDropHelper.IsDragSource="True" local:DragDropHelper.IsDropTarget="True"

        Width="216" BorderThickness="0" Background="{x:Null}" FontFamily="Segoe UI" ScrollViewer.HorizontalScrollBarVisibility="Disabled" UseLayoutRounding="True" HorizontalAlignment="Left"  ScrollViewer.VerticalScrollBarVisibility="Disabled" />

编辑:我认为问题可能与实体数据库绑定到列表框这一事实有关,这意味着项目的位置需要在数据库中更改,而不仅仅是列表框本身的位置.我对这种编码相当陌生,所以请原谅我缺乏代码词汇。

【问题讨论】:

  • 不能确切地说,但我也认为问题在于绑定到数据库。您是否使用任何模式(如 MVVM)或所有逻辑都放在代码隐藏中?您能提供将列表框绑定到源数据的代码吗?
  • 您将需要提供更多代码,没有什么可做的了。什么是 DragDropHelper,可以下载吗?我假设您已经针对一些虚拟数据测试了您的代码,以消除数据库的问题。
  • 应用运行时的一些测试:更改数据库中的顺序;更改绑定集合中的顺序。发生什么了?接下来,获取 DragDrop 代码的源代码并在应该触发的方法中放置断点..
  • DragDropHelper 的代码试图操纵 ListBox 绑定到的集合以使拖放生效。这一步出了点问题,您需要调试到 DragDropHelper DropTarget_PreviewDrop 或 DecideDropTarget 以找出它不工作的原因。或者它可能成功地修改了集合,但您没有看到更改,因为它不是 ObservableCollection。
  • 我的列表框像这样绑定到数据:listBoxProperties.ItemsSource = entity.Properties.ToList();

标签: c# wpf drag-and-drop listbox


【解决方案1】:

我认为 RandomEngy 是正确的。我认为您需要一个带有绑定到 ListBox 的 ICollectionView 的 ObservableCollection。集合视图允许在不干扰原始项目源的情况下“更改”查看的集合。

【讨论】:

    猜你喜欢
    • 2011-03-21
    • 1970-01-01
    • 2012-05-08
    • 2015-12-28
    • 2010-10-22
    • 2014-01-18
    • 2013-09-20
    • 2012-05-31
    • 1970-01-01
    相关资源
    最近更新 更多