Fragensteller
MenuFlyout MenuFlyoutItem Command DataBinding mit Übermittlung des "sender" als Parameter

Allgemeine Diskussion
-
Hallo,
Ich versuche folgendes Problem zu lösen und benötige etwas Hilfe (PRISM ist implementiert):
Ich habe eine ListBox per Datenbindung an eine ObservableCollection gehängt. Einträge eintragen läuft problemlos. Nun möchte ich sie ändern, löschen und verschieben können. Das ganze soll mit einem MenuFlyout am entsprechenden Item in der Listbox möglich sein.
Der XAML Code sieht folgendermaßen aus:
<controls:PageBase.Resources> <DataTemplate x:Key="CheckListEntry"> <Grid Width="{Binding ActualWidth, ElementName=ContentPanel, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Height="Auto" Holding="Grid_Holding"> <FlyoutBase.AttachedFlyout> <MenuFlyout> <MenuFlyoutItem x:Name="Edit" Text="Edit"/> <MenuFlyoutItem x:Name="Delete" Text="Delete" Command="{Binding DeleteCommand}"/> <MenuFlyoutItem x:Name="MoveUp" Text="Move Up" Command="{Binding MoveUpCommand}"/> <MenuFlyoutItem x:Name="MoveDn" Text="Move Down" Command="{Binding MoveDownCommand}"/> </MenuFlyout> </FlyoutBase.AttachedFlyout> <Grid.ColumnDefinitions> <ColumnDefinition Width="7*"/> <ColumnDefinition Width="1*"/> </Grid.ColumnDefinitions> <TextBlock Grid.Column="0" Text="{Binding Item, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Foreground="White" FontSize="24" VerticalAlignment="Center"/> <CheckBox Grid.Column="1" IsChecked="{Binding Checked, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Command="{Binding SaveCollectionToFile}"/> </Grid> </DataTemplate> </controls:PageBase.Resources>Eines der Commands sieht folgendermaßen aus:
Eines der Commands sieht folgendermaßen aus:
private DelegateCommand<CheckListItem> _deleteCommand; public DelegateCommand<CheckListItem> DeleteCommand { get { if (_deleteCommand != null) return _deleteCommand; _deleteCommand = new DelegateCommand<CheckListItem> ( (item) => { Collection.Remove(item); } ); return _deleteCommand; } }
Weis jemand was ich als Command Parameter mitschicken muss um das CheckListItem zu erhalten und ob DelegateCommand<CheckListItem> korrekt ist oder "object" mit casten oder Typwandlung besser ist?
Oder ist mein Weg komplett falsch?
- Typ geändert Aleksander Chalabashiev Donnerstag, 1. Oktober 2015 07:01 keine Rückmeldung
Alle Antworten
-
Hallo,
ich vermute mal das dein DataTemplate für das anzeigen eines CheckListItem gedacht ist. Du kannst den CommandParameter beispielsweise wie folgt belegen:
<MenuFlyoutItem x:Name="Delete" Text="Delete" Command="{Binding DeleteCommand}" CommandParameter="{Binding }"/>
Da man hier keinen Pfad für das Binding angibt, wird einfach das gesamte Item an sich gebunden und im ViewModel erhält man wiederum das CheckListItem als CommandParameter.
Wenn es geht sollte man es vermeiden mit Object und unnötigen casts zu arbeiten. Da du hier einen speziellen Typ hast (DelegateCommand<T>) solltest du diesen auch überall dort verwenden wo du weißt das er zum Einsatz kommt.
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets -
Danke erstmal dafür.
Was aber noch nicht funktioniert ist das Auslösen des Commands, habe einen Breakpoint gesetzt und leider passiert beim drücken des Menüpunktes gar nichts. Ich mal testweise den Click-Event in der Code-Behind Datei implementiert, dieser funktioniert tadellos.
-
Hallo c0d3_m,
bist du weitergekommen?
Gruß
Aleksander
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.