Results 1 to 2 of 2

Thread: Drag and Drop (and re-order) to ListBox binded to XML

  1. #1
    Jayme65 is offline VB.NET Forum Enthusiast
    .NET Framework
    .NET 4.0
    Join Date
    Apr 2011
    Posts
    35
    Reputation
    76

    Post Drag and Drop (and re-order) to ListBox binded to XML

    Would you please help me with this scenario:

    On stage, 2 listboxes and a textbox.
    1.The first listbox lists all the items available, the list is grouped by 'Type' and its source is a binded XML file (read only).
    2.The second listbox list all the items the user has dropped into from ListBox#1 and it should read from an XML at start-up and save to it on quitting.
    3.The textbox list the details of the currently selected item in ListBox#2

    snap.gif

    My knowledge (and search on internet ) allowed me to achieve binding, grouping with an expander and perhaps the first step to drag item (to be verified)..but I'm stucked at dropping AND re-ordering items on ListBox#2..then saving to the XML!!

    Would you please help (even in c#..I'll try to do the translation) ? I join a graphic and the project file (with XML files inside) to help you help me! Thanks!!

    The XAML

    Code:
    <Window x:Class="MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"
        xmlns:dat="clr-namespace:System.Windows.Data;assembly=PresentationFramework"
        Title="MainWindow" Height="400" Width="525">
        <Grid>
            <Grid.Resources>
                <DataTemplate x:Key="Resource3">
                    <Label Content="{Binding XPath=Name}"/>
                </DataTemplate>
                <Style x:Key="ListBoxItemStyle1" TargetType="{x:Type ListBoxItem}">
                    <EventSetter Event="ListBoxItem.PreviewMouseLeftButtonDown" Handler="s_PreviewMouseLeftButtonDown" />
                </Style>
                <Style x:Key="ListBoxItemStyle2" TargetType="{x:Type ListBoxItem}">
                    <Setter Property="AllowDrop" Value="true"/>
                    <EventSetter Event="ListBoxItem.PreviewMouseLeftButtonDown" Handler="s_PreviewMouseLeftButtonDown" />
                    <EventSetter Event="ListBoxItem.Drop" Handler="listbox_Drop"/>
                </Style>
            </Grid.Resources>
            <Grid Name="Grid01">
                <Grid.Resources>
                    <CollectionViewSource x:Key="cvsSystems" Source="{Binding XPath=System}">
                        <CollectionViewSource.SortDescriptions>
                            <scm:SortDescription PropertyName="@Type"/>
                            <scm:SortDescription PropertyName="Name"/>
                        </CollectionViewSource.SortDescriptions>
                        <CollectionViewSource.GroupDescriptions>
                            <dat:PropertyGroupDescription  PropertyName="@Type"/>
                        </CollectionViewSource.GroupDescriptions>
                    </CollectionViewSource>
                </Grid.Resources>
                <ListBox ItemsSource="{Binding Source={StaticResource cvsSystems}}" ItemTemplate="{StaticResource Resource3}" SelectedValuePath="Name" IsSynchronizedWithCurrentItem="True" HorizontalAlignment="Left" x:Name="ListBox1" Width="160" ItemContainerStyle="{DynamicResource ListBoxItemStyle1}" Margin="0,0,0,0">
                    <ListBox.GroupStyle>
                        <GroupStyle>
                            <GroupStyle.ContainerStyle>
                                <Style TargetType="{x:Type GroupItem}">
                                    <Setter Property="Template">
                                        <Setter.Value>
                                            <ControlTemplate>
                                                <Expander Header="{Binding Name}" IsExpanded="True">
                                                    <ItemsPresenter />
                                                </Expander>
                                            </ControlTemplate>
                                        </Setter.Value>
                                    </Setter>
                                </Style>
                            </GroupStyle.ContainerStyle>
                        </GroupStyle>
                    </ListBox.GroupStyle>
                </ListBox>
            </Grid>
            <Grid Name="Grid02">
                <Grid.Resources>
                    <CollectionViewSource x:Key="cvsPreferences" Source="{Binding XPath=System}">
                        <CollectionViewSource.SortDescriptions>
                            <scm:SortDescription PropertyName="@Type"/>
                            <scm:SortDescription PropertyName="Name"/>
                        </CollectionViewSource.SortDescriptions>
                        <CollectionViewSource.GroupDescriptions>
                            <dat:PropertyGroupDescription  PropertyName="@Type"/>
                        </CollectionViewSource.GroupDescriptions>
                    </CollectionViewSource>
                </Grid.Resources>
                <ListBox ItemsSource="{Binding Source={StaticResource cvsPreferences}}" ItemTemplate="{StaticResource Resource3}" SelectedValuePath="Name" IsSynchronizedWithCurrentItem="True" HorizontalAlignment="Left" x:Name="ListBox2" Width="160" ItemContainerStyle="{DynamicResource ListBoxItemStyle2}" Margin="170,0,0,0"/>
                <Button Content="Save" Height="23" HorizontalAlignment="Left" Margin="385,320,0,0" Name="Button1" VerticalAlignment="Top" Width="75" />
            </Grid>
            <TextBox DataContext="{Binding SelectedItem, ElementName=ListBox2}" Text="{Binding UpdateSourceTrigger=PropertyChanged, XPath=Detail}" Margin="340,0,0,0" x:Name="TextBox1" HorizontalAlignment="Left" VerticalAlignment="Top" Width="160"/>
        </Grid>
    </Window>
    The VB code

    Code:
    Imports System.IO
    Imports System.Xml
    Class MainWindow
        Dim sysdata As XmlDocument = New XmlDocument()
        Dim prefdata As XmlDocument = New XmlDocument()
        Dim systemdata As XmlDataProvider = New XmlDataProvider()
        Dim preferencedata As XmlDataProvider = New XmlDataProvider()
        Private Sub MainWindow_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded
            'Initialisation XML
            sysdata.Load(System.AppDomain.CurrentDomain.BaseDirectory & "Systems.xml")
            prefdata.Load(System.AppDomain.CurrentDomain.BaseDirectory & "Preferences.xml")
            systemdata.Document = sysdata
            preferencedata.Document = prefdata
            systemdata.XPath = "Systems"
            preferencedata.XPath = "Systems"
            Grid01.DataContext = systemdata
            Grid02.DataContext = preferencedata
        End Sub
    
        Private Sub s_PreviewMouseLeftButtonDown(ByVal sender As Object, ByVal e As MouseButtonEventArgs)
            If TypeOf sender Is ListBoxItem Then
                Dim draggedItem As ListBoxItem = TryCast(sender, ListBoxItem)
                DragDrop.DoDragDrop(draggedItem, draggedItem.DataContext, DragDropEffects.Copy)
                draggedItem.IsSelected = True
            End If
        End Sub
    
        Private Sub listbox_Drop(ByVal sender As Object, ByVal e As DragEventArgs)
    
        End Sub
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click
            preferencedata.Document.Save(System.AppDomain.CurrentDomain.BaseDirectory & "Preferences.xml")
        End Sub
    End Class
    Attached Files Attached Files
    Last edited by JohnH; 02-11-2015 at 6:48 AM. Reason: removed binaries (bin+obj folders)

  2. #2
    Jayme65 is offline VB.NET Forum Enthusiast
    .NET Framework
    .NET 4.0
    Join Date
    Apr 2011
    Posts
    35
    Reputation
    76
    Is this that hard ?

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •