Добавить комментарий - CodeHelper

Добавить комментарий

Добрый день! Сел осваивать drag&drop в WPF. Нашел неплохой пример: http://www.wpftutorial.net/DragAndDrop.html Итак, у меня есть коллекция объектов типа Dimension, внутри каждого находится другая коллекция объектов типа Measure. Написал следующий XAML:

<TreeView PreviewMouseLeftButtonDown="treeView1_PreviewMouseLeftButtonDown" PreviewMouseMove="treeView1_PreviewMouseMove">
  <TreeView.Resources>
    <HierarchicalDataTemplate DataType="{x:Type qb:Dimension}" ItemsSource="{Binding Measures}">
        <TextBlock Margin="10,0,0,0" Text="{Binding Name}"></TextBlock>
    </HierarchicalDataTemplate>
    <HierarchicalDataTemplate DataType="{x:Type qb:Measure}">
      <TextBlock Margin="10,0,0,0" Text="{Binding Name}"></TextBlock>
    </HierarchicalDataTemplate>
  </TreeView.Resources>
</TreeView>

Далее, в соответствии с примером написал следующую функцию:

private void treeView1_PreviewMouseMove(object sender, MouseEventArgs e)
{
  Point mousePos = e.GetPosition(null);
  Vector diff = _DragStart - mousePos;

  if (e.LeftButton == MouseButtonState.Pressed &&
    Math.Abs(diff.X) > SystemParameters.MinimumHorizontalDragDistance &&
    Math.Abs(diff.Y) > SystemParameters.MinimumVerticalDragDistance)
  {
    TreeView treeView = sender as TreeView;
    TreeViewItem treeViewItem =
      FindAnchestor<TreeViewItem>((DependencyObject)e.OriginalSource);

    if (treeViewItem != null)
    {
      // если перетащить корневые элементы, то получаем, как и ожидалось, объект Dimension
      // если перетащить элементы второго уровня, то здесь оказывается DependencyProperty.UnsetValue
      object item = treeView.ItemContainerGenerator.
        ItemFromContainer(treeViewItem);

      if (item is Measure)
      {
        DataObject dragData = new DataObject("Measure", item);
        DragDrop.DoDragDrop(treeViewItem, dragData, DragDropEffects.Move);
      }
    }
  }

Выходит, что когда я пытаюсь перетащить элементы первого уровня (корневые), то в переменной item получаю соответствующий объект типа Dimension. Но если попробовать перетянуть объект второго уровня, то в item лежит DependencyProperty.UnsetValue. Подозреваю, что я криво забайндил, хотя визуально все хорошо.

Демо-проект находится тут: http://www.sendspace.com/file/l1rdw9

Внимание! Вы собираетесь отправить информацию от имени анонимного пользователя.
v1.7.123.556
© 2009—2010 CodeHelper FAQ | О сайте | Обратная связь | История изменений | Статьи
Creative Commons LicenseМатериалы сайта распространяются под лицензией Creative Commons Attribution-Share Alike 3.0 Unported.