【发布时间】: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