2 pièce(s) jointe(s)
Drag and Drop (et réordonner) vers un ListBox bindé à un XML
Bonjour, est ce que vous pourriez m'aider avec ce scénario:
Sur la scène, 2 ListBox et 1 TextBox
1. Le premier listbox contient tous les éléments disponibles. Cette liste est groupée par 'Type' et sa source est un XML bindé (lecture seul)
2. Le second listbox contient les éléments que l'utilisateur a glissé/déposé depuis la listbox#1 et cette liste doit être lue au démarrage puis sauvée quand on quitte.
3. Le textbox contient le détail de l'élément actuellement sélectionné dans la listbox#2
Pièce jointe 168776
Mes connaissances - et ma recherche sur internet ;) - m'ont permis de pouvoir ecécuter le binding, le groupement avec un expander et (peut-être) la première étape du 'drag' (à vérifier)..mais je suis bloqué sur le 'drop' et le réordonnement de la listbox#2..et ensuite sauver en xml!!
Pourriez-vous svp m'aider? (même en C#, j'essayerai de traduire). Je joint une image ainsi que le projet (avec les fichiers XML à l'intérieur) pour vous aidez à m'aider!!
Le code XAML
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
| <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> |
Le code VB
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| 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
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 |