米琪卡哇伊
如果您只想移动整个列表并为每个创建一个磁贴Member,那么这是一种方法:首先,您应该简化您的模板并将其放入 XAML。XAML 在处理任何类型的模板方面比背后的代码更有效对于您的左侧主面板: <ItemsControl x:Name="mainPanel" Grid.Column="0" ItemsSource="{Binding}"> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <WrapPanel Background="#F0F0F0" AllowDrop="True" Drop="mainPanel_Drop"> <WrapPanel.ContextMenu> <ContextMenu> <MenuItem Click="MenuItem_Click" Header="Add Panel" /> </ContextMenu> </WrapPanel.ContextMenu> </WrapPanel> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> <ItemsControl.ItemTemplate> <DataTemplate> <StackPanel Orientation="Vertical" Background="White" AllowDrop="True" Margin="15,15,0,10" Width="150" MinWidth="150" Height="150" MinHeight="150"> <Label Content="{Binding Name}"/> <Label Content="{Binding ID}"/> <Label Content="{Binding Address}"/> </StackPanel> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl>对于您的列表(没有太大变化) <ListBox Name="memberCollection" Grid.Column="1" Width="150" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ItemsSource="{Binding}" PreviewMouseLeftButtonDown="memberCollection_PreviewMouseLeftButtonDown"> <ListBox.ItemTemplate> <DataTemplate> <StackPanel> <Label Name="memberName" Content="{Binding Name}" /> </StackPanel> </DataTemplate> </ListBox.ItemTemplate> </ListBox>我添加了两个 ObservableCollection 来管理数据 ObservableCollection<Member> member = new ObservableCollection<Member>(); ObservableCollection<Member> mainPanelMembers = new ObservableCollection<Member>(); public MainWindow() { InitializeComponent(); member.Add(new Member { Name = "Karthick", ID = "20011", Address = "10, MainRoad, Chennai" }); member.Add(new Member { Name = "Suresh", ID = "20012", Address = "11, MainRoad, Madurai" }); member.Add(new Member { Name = "Arun", ID = "20013", Address = "12, MainRoad, Selam" }); member.Add(new Member { Name = "Gokul", ID = "20014", Address = "13, MainRoad, Coimbature" }); member.Add(new Member { Name = "Vishnu", ID = "20015", Address = "14, MainRoad, Goa" }); memberCollection.DataContext = member; mainPanel.DataContext = mainPanelMembers; }然后,创建一个新的 Tile 就简单多了:private void MenuItem_Click(object sender, RoutedEventArgs e){ mainPanelMembers.Add(new Member());}如果要复制整个列表,则必须将整个 ObservableCollection 交给 DragDrop 管理器: private void memberCollection_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) { object collectionDataContext = memberCollection.DataContext; if (collectionDataContext != null) { DataObject dragData = new DataObject("DataContext", collectionDataContext); DragDrop.DoDragDrop(memberCollection, dragData, DragDropEffects.Move); } }而当你放下它时,你可以简单地一一添加成员。您也可以之前清除集合(但我没有): private void mainPanel_Drop(object sender, DragEventArgs e) { DataObject item = e.Data as DataObject; object listItem = item.GetData("DataContext") as IEnumerable<Member>; if (listItem != null) { foreach (Member member in (IEnumerable<Member>)listItem) { ((ObservableCollection<Member>)mainPanel.DataContext).Add(member); } } }我不确定我是否完全理解你想要什么......我仍然不知道你是如何使用 Tile 创建的。如果您需要做一些不同的事情,请告诉我。