mayho33
Goto Top

C-Sharp WPF ListView Drag and Drop mit SelectionChangedEvent

Hallo @ All!

Ich versuche Drag'n'Drop in einer ListView<T> umzusetzen. Jedoch feuert SelectionChangedEventArgs nicht mehr. Hoffe es kann mir jemand von euch einen Tipp geben. Google lässt mich irgendwie im Stich face-sad

Das Problem:
Ich habe einen ListView mit mehreren Spalten und fange SelectionChangedEventArgs e.AddedItems bzw. e.RemovedItems ab um im ClassModel die einzelnen Properties zu befüllen.
Aus einem Beispiel vom StackoverFlow habe ich das hier: http://stackoverflow.com/questions/3350187/wpf-c-rearrange-items-in-lis ...
Funktionert perfekt, nur SelectionChangedEvent arbeitet leider nicht mehr.
Gehe davon aus, dass das neuerliche Initialisieren des Style-Setters im XAML.cs den alten überschreibt und das SelectionChangedEvent das ich im XAML gesetzt habe nun nicht mehr zieht.

Den Setter im XAML.cs zu ergänzen mit SelectionChangedEventArgs habe ich nicht zu Laufen gebracht.

Wäre froh, wenn mir jemand von euch einen Tipp geben könnte wie ich entweder den Setter im XAML.cs erweitern kann damit SelectionChanged nach Drag'n'Drop wieder funktioniert, oder wie ich das vielleicht auf anderem Wege lösen kann.

Danke für die Unterstützung!

Mayho


PS: Das XAML:
<ListView
	x:Name="listView"  
       	MaxHeight="423"  
        x:FieldModifier="public"  
        AllowDrop="True"  
        AutomationProperties.IsColumnHeader="True"  
        ItemsSource="{Binding Path=List_All}"  
        KeyboardNavigation.TabNavigation="Continue"  
        SelectionChanged="ListView_SelectionChanged"  
        SelectionMode="Multiple">  
        <ListView.View>
            <GridView>
                <GridViewColumn
                    x:Name="WholeFolder"  
                    Width="auto"  
                    x:FieldModifier="public"  
                    HeaderContainerStyle="{StaticResource GridViewHeaderAllingnment}">  
                    <GridViewColumn.Header>
                        <TextBlock Text="+ SubFiles" />  
                    </GridViewColumn.Header>
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <CheckBox
                                x:Name="checkbox_WholeFolder"  
                                HorizontalAlignment="Center"  
                                IsChecked="{Binding Path=WholeFolder_IsChecked}"  
                                IsEnabled="{Binding Path=WholeFolder_IsEnabled}" />  
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>

                        <GridViewColumn
                            x:Name="Exclude"  
                            Width="auto"  
                            x:FieldModifier="public"  
                            HeaderContainerStyle="{StaticResource GridViewHeaderAllingnment}">  
                            <GridViewColumn.Header>
                                <TextBlock Text="exclude" />  
                            </GridViewColumn.Header>
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                    <CheckBox
                                        x:Name="checkbox_Exclude"  
                                        HorizontalAlignment="Center"  
                                        IsChecked="{Binding Path=Exclude_IsChecked}"  
                                        IsEnabled="{Binding Path=Exclude_IsEnabled}" />  
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>

                        <GridViewColumn
                            x:Name="AssetID"  
                            Width="70"  
                            x:FieldModifier="public"  
                            HeaderContainerStyle="{StaticResource GridViewHeaderAllingnment}">  
                            <GridViewColumn.Header>
                                <TextBlock Text=" ? AssetID" />  
                            </GridViewColumn.Header>
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                    <TextBox
                                        x:Name="textbox_AssetID"  
                                        Width="50"  
                                        HorizontalAlignment="Center"  
                                        IsEnabled="{Binding Path=AssetID_IsEnabled}"  
                                        Text="{Binding Path=AssetID, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />  
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>

                        <GridViewColumn
                            Width="auto"  
                            DisplayMemberBinding="{Binding FileDirectoryForSummary}"  
                            HeaderContainerStyle="{StaticResource GridViewHeaderAllingnment}">  
                            <GridViewColumn.Header>
                                <TextBlock Text="Root" />  
                            </GridViewColumn.Header>
                        </GridViewColumn>

                        <GridViewColumn
                            Width="auto"  
                            DisplayMemberBinding="{Binding FileName}"  
                            HeaderContainerStyle="{StaticResource GridViewHeaderAllingnment}">  
                            <GridViewColumn.Header>
                                <TextBlock Text="Name" />  
                            </GridViewColumn.Header>
                        </GridViewColumn>
                    </GridView>
                </ListView.View>
            </ListView>

Aus einem Beispiel vom StackoverFlow habe ich das hier: http://stackoverflow.com/questions/3350187/wpf-c-rearrange-items-in-lis ...

Content-Key: 334139

Url: https://administrator.de/contentid/334139

Printed on: April 16, 2024 at 23:04 o'clock

Member: mayho33
mayho33 Apr 07, 2017 at 10:02:49 (UTC)
Goto Top
Hat niemand einen Tipp?

Im Grunde habe ich 2 Probleme:

ich übergebe das "draggedItem" so an DragDrop.DoDragDrop() aus diesem Beispiel (http://stackoverflow.com/questions/3350187/wpf-c-rearrange-items-in-lis ..). Unterschied: Ich will die Events im XAML anlegen, nicht im Code-Behind, weil sonst das SelectionChanged-Event nicht mehr zieht:
ListViewItem draggedItem = 
listView.ItemContainerGenerator.ContainerFromItem(((ListView)sender).SelectedItem) as ListViewItem;
DragDrop.DoDragDrop(draggedItem, draggedItem.DataContext, DragDropEffects.Move);


Wie bekomme ich nun in listView_Drop(object sender, DragEventArgs e)

a) ein ListViewItem aus meiner ListView<T> ?
b) die Position an der das Item wieder eingefügt werden soll?

Der ListView liegt eine ObservableCollection<ListView_Model> zugrunde.
Ich habe noch ein SelectionChanged-Event in dem ich via e.AddedItems und e.RemovedItems Anpassungen an den Daten vornehme die ich nachher auswerten will. Das Event ist also ein must.

Bitte, bitte, bitte ein paar Tipps face-smile

Danke!

Mayho
Member: mayho33
mayho33 Apr 07, 2017 at 12:45:23 (UTC)
Goto Top
Edit:

Wie so oft lag es wieder mal an der Logik. Problem gelöst.