2011-01-12 9 views
0

ListBox (XAML에 ItemTemplate이 정의되어 있음)와 DataGrid가 있습니다. DataGrid에서 ListBox로 끌어서 놓기 작업을 수행하려고합니다. 내 문제는 어떤 ListBoxItem 끌어 놓은 행이 삭제되었습니다 방법을 알 수없는 것입니다.DataGrid에서 ListBoxItem으로 끌어서 놓기

누구나 아이디어가 있습니까?

미리 감사드립니다.

편집은 : 여기에옵니다의 XAML입니다 :

<toolkit:DockPanel Grid.Column="0" Grid.Row="0" Grid.RowSpan="3" Width="200"> 
      <toolkit:ListBoxDragDropTarget Name="dropTarget1" AllowDrop="True" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" AllowedSourceEffects="Move"> 
       <ListBox Name="lbClusters"> 

        <!-- Override default HorizontalContentAlignment --> 
        <ListBox.ItemContainerStyle> 
         <Style TargetType="ListBoxItem"> 
          <Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter> 
         </Style> 
        </ListBox.ItemContainerStyle> 

        <!-- Override default presentation panel (to be able to organize) --> 
        <ListBox.ItemsPanel> 
         <ItemsPanelTemplate> 
          <StackPanel /> 
         </ItemsPanelTemplate> 
        </ListBox.ItemsPanel> 

        <!-- Items presentation --> 
        <ListBox.ItemTemplate> 
         <DataTemplate> 
          <Border BorderBrush="Black" BorderThickness="1" Margin="5"> 
           <Grid> 
            <Grid.RowDefinitions> 
             <RowDefinition /> 
             <RowDefinition /> 
            </Grid.RowDefinitions> 

            <Border Background="Gray" Padding="10,5,0,5" Grid.Row="0" > 
             <TextBlock Text="{Binding Name}" HorizontalAlignment="Stretch" /> 
            </Border> 
            <ListBox ItemsSource="{Binding MatchingProcessors}" DisplayMemberPath="Name" Grid.Row="1" MinHeight="100" /> 
           </Grid> 
          </Border> 
         </DataTemplate> 
        </ListBox.ItemTemplate> 
       </ListBox> 
      </toolkit:ListBoxDragDropTarget> 
     </toolkit:DockPanel> 

그리고 여기에 데이터 그리드는 : 여기

<toolkit:DataGridDragDropTarget VerticalContentAlignment="Stretch" HorizontalContentAlignment="Stretch" VerticalAlignment="Stretch"> 

       <sdk:DataGrid Name="Grid1" SelectionChanged="Grid_SelectionChanged" AutoGenerateColumns="False"> 
        <sdk:DataGrid.Columns> 
         <sdk:DataGridTextColumn Binding="{Binding Configuration.Nickname}" Header="NickName" /> 
         <sdk:DataGridTextColumn Binding="{Binding SerialNumber}" Header="SN" /> 
         <sdk:DataGridTextColumn Binding="{Binding ComputerName}" Header="IPHostname"/> 
         <sdk:DataGridTextColumn Binding="{Binding Configuration.GroupName}" Header="Group" /> 
        </sdk:DataGrid.Columns> 
       </sdk:DataGrid> 

      </toolkit:DataGridDragDropTarget> 

답변

0

좋아, 내가 ... 어쩌면 더 나은 솔루션이 무슨 짓을? 하지만이게 내가 필요한 것에 맞는 것 같아. 내가 도스 이벤트를 구현 한 코드에서 다음

<ListBox.ItemTemplate> 
<DataTemplate> 
    <Border BorderBrush="Black" BorderThickness="1" Margin="5"> 
     <Grid MouseEnter="Grid_MouseEnter" MouseLeave="Grid_MouseLeave"> 
      <Grid.RowDefinitions>            
       <RowDefinition />            
       <RowDefinition /> 
      </Grid.RowDefinitions> 

      <Border Background="Gray" Padding="10,5,0,5" Grid.Row="0" > 
       <TextBlock Text="{Binding Name, Mode=TwoWay}" HorizontalAlignment="Stretch" /> 
      </Border> 
      <ListBox ItemsSource="{Binding MatchingProcessors, Mode=TwoWay}" DisplayMemberPath="SerialNumber" Grid.Row="1" MinHeight="100" /> 
     </Grid> 
    </Border> 
</DataTemplate> 
</ListBox.ItemTemplate> 

하고 목록 상자에서 맴돌고 요소에 대한 참조를 유지 : 그리드에 MouseEnterMouseLeave :

나는이 이벤트를 추가 내 ListBox.ItemTemplate을 변경했습니다.

private ListBoxItem currentListBoxItem = null; 

    private void Grid_MouseEnter(object sender, MouseEventArgs e) 
    { 
     List<UIElement> list = VisualTreeHelper.FindElementsInHostCoordinates(e.GetPosition(null), LayoutRoot as UIElement) as List<UIElement>; 
     var tmp = list.OfType<ListBoxItem>().Where(el => el.DataContext != null && el.DataContext is MyType).FirstOrDefault(); 

     if (tmp != null) 
     { 
      this.currentListBoxItem = tmp; 
     } 
    } 

    private void Grid_MouseLeave(object sender, MouseEventArgs e) 
    { 
     this.currentListBoxItem = null; 
    }