This is a migrated thread and some comments may be shown as answers.

DragDrop.Behaviors cause to duplicate data

0 Answers 65 Views
DragAndDrop
This is a migrated thread and some comments may be shown as answers.
manoj savalia
Top achievements
Rank 2
manoj savalia asked on 22 Feb 2012, 06:18 AM
I have two list box. in my list box drag and drop functionality work fine. But it is not work when rearrange order of any listbox and then drag and drop.
I also add my code ....


I have one file DragVisualProvider.cs which is like



using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Telerik.Windows.DragDrop.Behaviors;
using System;
using System.Net;
using System.Windows;
using Telerik.Windows.DragDrop.Behaviors;
using Telerik.Windows.DragDrop;
using Telerik.Windows.Controls;
using System.Linq;

namespace DragCuePictureTest
{
    public class DragVisualProvider : DependencyObject, IDragVisualProvider
    {
        public DataTemplate DraggedItemTemplate
        {
            get
            {
                return (DataTemplate)GetValue(DraggedItemTemplateProperty);
            }
            set
            {
                SetValue(DraggedItemTemplateProperty, value);
            }
        }

        public static readonly DependencyProperty DraggedItemTemplateProperty =
        DependencyProperty.Register("DraggedItemTemplate", typeof(DataTemplate), typeof(DragVisualProvider), new PropertyMetadata(null));

        public FrameworkElement CreateDragVisual(DragVisualProviderState state)
        {
            var visual = new DragVisual();

            var theme = StyleManager.GetTheme(state.Host);
            if (theme != null)
            {
                StyleManager.SetTheme(visual, theme);
            }

            visual.Content = state.DraggedItems.OfType<object>().FirstOrDefault();
            visual.ContentTemplate = this.DraggedItemTemplate;

            return visual;
        }

        public Point GetDragVisualOffset(DragVisualProviderState state)
        {
            return state.RelativeStartPoint;
        }

        public bool UseDefaultCursors { get; set; }


    }
}



In my Example.xaml File



<UserControl x:Class="DragCuePictureTest.Example"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
             xmlns:dragDropBehaviors="clr-namespace:Telerik.Windows.DragDrop.Behaviors;assembly=Telerik.Windows.Controls"
             xmlns:telerikQuickStart="clr-namespace:Telerik.Windows.Controls.QuickStart;assembly=Telerik.Windows.Controls"
             xmlns:local="clr-namespace:DragCuePictureTest"
            
             VerticalAlignment="Center" HorizontalAlignment="Center">

    <telerikQuickStart:QuickStart.ExampleHeader>
        <TextBlock Text="Drag and Drop" Margin="8"  />
    </telerikQuickStart:QuickStart.ExampleHeader>

    <UserControl.Resources>
        <!--<local:MainViewModel x:Key="ViewModel"/>-->
        <telerik:MetroColors x:Key="MetroColors" />
        <SolidColorBrush x:Key="AccentBrush" Color="{Binding Source={StaticResource MetroColors}, Path=Palette.AccentColor}" />
        <SolidColorBrush x:Key="BasicBrush" Color="{Binding Source={StaticResource MetroColors}, Path=Palette.BasicColor}" />
        <SolidColorBrush x:Key="StrongBrush" Color="{Binding Source={StaticResource MetroColors}, Path=Palette.StrongColor}" />
        <SolidColorBrush x:Key="MainBrush" Color="{Binding Source={StaticResource MetroColors}, Path=Palette.MainColor}" />
        <SolidColorBrush x:Key="MarkerBrush" Color="{Binding Source={StaticResource MetroColors}, Path=Palette.MarkerColor}" />
        <SolidColorBrush x:Key="ValidationBrush" Color="{Binding Source={StaticResource MetroColors}, Path=Palette.ValidationColor}" />
        <DataTemplate x:Key="ApplicationDragTemplate">
            <!--<Image Source="{Binding IconPath}" Stretch="None" VerticalAlignment="Top" />-->
            <TextBlock Text="{Binding Name}" />
        </DataTemplate>
        <Style TargetType="ListBoxItem" x:Key="draggableItemStyle">
            <Setter Property="HorizontalAlignment" Value="Stretch" />
            <Setter Property="HorizontalContentAlignment" Value="Stretch" />
            <Setter Property="Foreground" Value="#000000" />
            <Setter Property="telerik:DragDropManager.AllowDrag" Value="True" />
            <Setter Property="telerik:DragDropManager.AllowCapturedDrag" Value="True" />
        </Style>

    </UserControl.Resources>
    <Grid x:Name="LayoutRoot" Width="700" Height="450">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <ListBox x:Name="allApplicationsBox" BorderThickness="0" telerik:StyleManager.Theme="Metro" Margin="0,0,3,0"
                 ItemsSource="{Binding AllApplications}"
                 AllowDrop="True" Background="Transparent" BorderBrush="Transparent"
                 ItemContainerStyle="{StaticResource draggableItemStyle}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center" Background="LightCyan">
                        <Image Source="{Binding IconPath}"
                               HorizontalAlignment="Center" />
                        <TextBlock Text="{Binding Name}" Foreground="{StaticResource StrongBrush}"
                                   HorizontalAlignment="Center" />
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>

            <dragDropBehaviors:ListBoxDragDrop.Behavior>
                <dragDropBehaviors:ListBoxDragDropBehavior />
            </dragDropBehaviors:ListBoxDragDrop.Behavior>
            <dragDropBehaviors:ListBoxDragDrop.DragVisualProvider>
                <local:DragVisualProvider DraggedItemTemplate="{StaticResource ApplicationDragTemplate}"/>
            </dragDropBehaviors:ListBoxDragDrop.DragVisualProvider>
        </ListBox>
        <ListBox x:Name="myApplicationsBox" Background="Transparent" telerik:StyleManager.Theme="Metro" Grid.Column="1"
                
                 AllowDrop="True" BorderThickness="0" BorderBrush="Transparent"
                 ItemContainerStyle="{StaticResource draggableItemStyle}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Vertical">
                        <Grid Width="100" Height="100" Background="Purple">
                            <Grid.RowDefinitions>
                                <RowDefinition />
                                <RowDefinition />
                                <RowDefinition />
                            </Grid.RowDefinitions>
                            <Image Grid.Row="0" HorizontalAlignment="Center"
                               Source="{Binding IconPath}" Width="32" Height="32"
                               Margin="0 0 5 0" />
                            <TextBlock Grid.Row="1" Text="{Binding Name}" FontWeight="Bold"
                                   HorizontalAlignment="Center" Foreground="{StaticResource StrongBrush}"/>
                            <TextBlock Text="{Binding Author}" Grid.Row="2"
                                   HorizontalAlignment="Center" Foreground="{StaticResource StrongBrush}"/>
                        </Grid>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
            <ListBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <telerik:RadUniformGrid Columns="1" HorizontalAlignment="Left" VerticalAlignment="Top" />
                </ItemsPanelTemplate>
            </ListBox.ItemsPanel>
            <dragDropBehaviors:ListBoxDragDrop.Behavior>
                <dragDropBehaviors:ListBoxDragDropBehavior />
            </dragDropBehaviors:ListBoxDragDrop.Behavior>
            <dragDropBehaviors:ListBoxDragDrop.DragVisualProvider>
                <local:DragVisualProvider DraggedItemTemplate="{StaticResource ApplicationDragTemplate}"/>
            </dragDropBehaviors:ListBoxDragDrop.DragVisualProvider>
        </ListBox>
    </Grid>

</UserControl>


In my Example.xaml.cs file


using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Collections.ObjectModel;

namespace DragCuePictureTest
{
    public partial class Example : UserControl
    {
        public Example()
        {
            InitializeComponent();
            myApplicationsBox.ItemsSource = MyApplications;
            allApplicationsBox.ItemsSource = AllApplications;
        }


        private ObservableCollection<ApplicationInfo> allApplications = GenerateApplicationInfos();
        private ObservableCollection<ApplicationInfo> myApplications = GenerateMyApplicationInfos();

        public ObservableCollection<ApplicationInfo> AllApplications
        {
            get
            {
                return this.allApplications;
            }
            set
            {
                this.allApplications = value;
            }
        }

        public ObservableCollection<ApplicationInfo> MyApplications
        {
            get
            {
                return this.myApplications;
            }
            set
            {
                this.myApplications = value;
            }
        }

        public static ObservableCollection<ApplicationInfo> GenerateApplicationInfos()
        {
            ObservableCollection<ApplicationInfo> result = new ObservableCollection<ApplicationInfo>();

            ApplicationInfo info1 = new ApplicationInfo();
            info1.Name = "Large Collider";
            info1.Author = "C.E.R.N.";
            info1.IconPath = @"../Images/DragAndDrop/LargeIcons/Atom.png";
            result.Add(info1);

            ApplicationInfo info2 = new ApplicationInfo();
            info2.Name = "Paintbrush";
            info2.Author = "Imagine Inc.";
            info2.IconPath = @"../Images/DragAndDrop/LargeIcons/Brush.png";
            result.Add(info2);

            ApplicationInfo info3 = new ApplicationInfo();
            info3.Name = "Lively Calendar";
            info3.Author = "Control AG";
            info3.IconPath = @"../Images/DragAndDrop/LargeIcons/CalendarEvents.png";
            result.Add(info3);

            ApplicationInfo info4 = new ApplicationInfo();
            info4.Name = "Fire Burning ROM";
            info4.Author = "The CD Factory";
            info4.IconPath = @"../Images/DragAndDrop/LargeIcons/CDBurn.png";
            result.Add(info4);

            ApplicationInfo info5 = new ApplicationInfo();
            info5.Name = "Fav Explorer";
            info5.Author = "Star Factory";
            info5.IconPath = @"../Images/DragAndDrop/LargeIcons/favorites.png";
            result.Add(info5);

            ApplicationInfo info6 = new ApplicationInfo();
            info6.Name = "IE Fox";
            info6.Author = "Open Org";
            info6.IconPath = @"../Images/DragAndDrop/LargeIcons/Connected.png";
            result.Add(info6);

            return result;
        }

        public static ObservableCollection<ApplicationInfo> GenerateMyApplicationInfos()
        {
            ObservableCollection<ApplicationInfo> result = new ObservableCollection<ApplicationInfo>();

            ApplicationInfo info7 = new ApplicationInfo();
            info7.Name = "Charting";
            info7.Author = "AA-AZ inc";
            info7.IconPath = @"../Images/DragAndDrop/LargeIcons/ChartDot.png";
            result.Add(info7);

            ApplicationInfo info8 = new ApplicationInfo();
            info8.Name = "SuperPlay";
            info8.Author = "EB Games";
            info8.IconPath = @"../Images/DragAndDrop/LargeIcons/Games.png";
            result.Add(info8);

            return result;
        }
    }

    public class ApplicationInfo
    {
        public Double Price
        {
            get;
            set;
        }

        public String IconPath
        {
            get;
            set;
        }

        public String Name
        {
            get;
            set;
        }

        public String Author
        {
            get;
            set;
        }
    }
}



Please reply as soon as.....


No answers yet. Maybe you can help?

Tags
DragAndDrop
Asked by
manoj savalia
Top achievements
Rank 2
Share this question
or