2012-03-03 148 views
0

我有一个列表框显示一些房地产属性,这些属性是我存储在本地数据库中的对象。列表框使用简单的数据绑定绑定到这个数据库。我想实现一个拖放系统以允许用户相应地重新排列项目。但是,无论我在互联网上找到哪种实现方式,重新安排都无济于事。我尝试了至少5个不同的版本,并且所有这些都允许我拖动对象,显示虚拟装饰,甚至显示列表框将放置的位置,但释放鼠标按钮后,该项不会移动。没有错误,没有任何东西。这是我对我的列表框的代码,我希望这将是一些防止这种发生的历史愚蠢的一段代码:拖放以重新排列列表框内的项目wpf

<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" /> 

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

+1

您将需要提供更多的代码,没有太多可以继续。什么是DragDropHelper,是否可以下载?我假设你已经对一些虚拟数据测试了你的代码,以消除数据库的问题。 – Phil 2012-03-06 20:28:47

+1

应用程序运行时的一些测试:更改数据库中的顺序;更改绑定集合中的顺序。怎么了?接下来,获取DragDrop代码的源代码,并在应该触发的方法中放置断点。 – 2012-03-07 18:27:13

+0

DragDropHelper具有试图操纵ListBox绑定到的集合的代码,以使该放置生效。在这一步中出现了问题,您需要调试DragDropHelper DropTarget_PreviewDrop或DecideDropTarget,以了解它不起作用的原因。或者,它可能正在成功修改集合,但您没有看到更改,因为它不是ObservableCollection。 – RandomEngy 2012-03-07 19:17:36

回答

0

我在想RandomEngy是正确的。我认为你需要一个带有绑定到ListBox的ICollectionView的ObservableCollection。收集视图允许“更改”所查看的收藏集,而不会干扰原始项目的来源。