wpf中listbox和datagrid之间的双向拖放

wpf中listbox和datagrid之间的双向拖放,wpf,datagrid,listbox,two-way,Wpf,Datagrid,Listbox,Two Way,我正在寻找一些帮助,以实现WPF中ListBox和DataGrid列之间的双向拖放功能。我已经在网上搜索并设法抓取了拖放示例,但它们不能满足我的需要,而且大多数都缺少一些代码。我的datagrid包含两列,分别是EmployeeName和DepartmentName。这些值来自最初仅使用EmployeeName加载的集合。这意味着departmentname列为空。然后,用户可以使用拖放选择适当的部门。部门名称加载到列表框中。需要从列表框中选择Departmentname,将其拖放到datagr

我正在寻找一些帮助,以实现WPF中ListBox和DataGrid列之间的双向拖放功能。我已经在网上搜索并设法抓取了拖放示例,但它们不能满足我的需要,而且大多数都缺少一些代码。我的datagrid包含两列,分别是EmployeeName和DepartmentName。这些值来自最初仅使用EmployeeName加载的集合。这意味着departmentname列为空。然后,用户可以使用拖放选择适当的部门。部门名称加载到列表框中。需要从列表框中选择Departmentname,将其拖放到datagrid列中。使用该Employeename将映射到部门名称。一旦删除,该部门名称应该从列表框中删除,以便它不能映射到其他员工。可以通过将部门名称从datagrid拖回列表框并重新选择另一个部门名称进行拖放来更改映射

我的Xaml是这样的。(代码中实际上不是员工/部门,但我已经用它来解释我在寻找什么)


任何链接,样本代码,建议将不胜感激。 当做
Minal

我想试试这样的东西:

您必须稍微扩展接口:

接口IDragable
{
类型数据类型{get;}
//如果source=grid,则从employ中删除该部门;如果source=listbox,则从列表中删除该部门。
无效删除(对象一);
//如果source=grid和source=listbox,则返回部门。
对象GetDataToDrag();
}
接口IDropable
{
类型数据类型{get;}
//如果target=grid->set department on current employee,如果target=listbox->add item to listbox。
作废删除(对象数据)
}
因此,您需要2个ViewModels->一个用于网格,一个用于列表框,所有这些模型都实现IDragableIDragable

这些行为与我在上面发布的codeproject文章中的行为非常相似


如果您需要他们的进一步帮助,只需询问;)

非常感谢,迈克。这确实很有帮助。我今天会试一试,如果我需要任何进一步的帮助,我会告诉你。这方面有什么成功吗?是的,稍微调整一下,它对我很有效。谢谢你的帮助。
<DataGrid x:Name="DatagridEmployeeMapping"  Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" Margin="5,5,5,5" 
     ItemsSource="{Binding ElementName=MWindow, Path=Settings.EmployeeMapping}" GridLinesVisibility="Vertical" AutoGenerateColumns="False" CanUserAddRows="False" IsReadOnly="False" SelectionMode="Single" >
  <DataGrid.Columns>
      <DataGridTextColumn Header="Employee Name" Binding="{Binding Path=eName}" Width="1*"   IsReadOnly="True" />
       <DataGridTextColumn Header="Department Name" Binding="{Binding Path=dName}" Width="1*"  IsReadOnly="True"  />
  </DataGrid.Columns>
  </DataGrid>

<ListBox x:Name="ListboxDepartmentData" Grid.Column="2" Grid.Row="1"  Margin="5,5,5,5" 
    ItemsSource="{Binding ElementName=MWindow, Path=DepartmentDetails}" DisplayMemberPath="Name" ScrollViewer.VerticalScrollBarVisibility="Visible">
</ListBox>