In meiner UWP-App, die MVVMLight verwendet, habe ich eine Schaltfläche in meinem ListViewItem enthalten und wenn ich geklickt habe, möchte ich ein Flyout anzeigen und zusätzliche Aktionen für die spezifische ListViewItem aber wenn ich auf die Schaltfläche tippen, ich erhalte eine Fehlermeldung dhCapture-Tap-Ereignis von Button in ListViewItem ohne Auslöser Element klick - UWP Windows 10
System.InvalidCastException: Unable to cast object of
type 'Windows.UI.Xaml.Input.TappedRoutedEventArgs' to
type 'MyApp.ViewModels.ItemViewModel'.
at GalaSoft.MvvmLight.Command.RelayCommand`1.Execute(Object parameter)
at Microsoft.Xaml.Interactions.Core.InvokeCommandAction.Execute(Object
sender, Object parameter) at
Microsoft.Xaml.Interactivity.Interaction.ExecuteActions(Object sender,
ActionCollection actions, Object parameter)
at Microsoft.Xaml.Interactions.Core.EventTr
ich einige verstehen erweitern, warum es passiert ist, aber, wie ich kann ich dieses Problem beheben? Die Schaltfläche, die in meiner ListViewItem-Datenvorlage enthalten ist, wird offensichtlich an das übergeordnete Element übergeben, bei dem es sich um die Listenansicht handelt, und der DataTrigger, der in der Listenansicht definiert ist, erfasst sie.
Alles, was ich tun möchte, ist ein Flyout anzuzeigen, wenn diese Schaltfläche angeklickt wird, um zusätzliche Optionen zur Verfügung zu stellen.
<ListView.ItemTemplate>
<DataTemplate>
<Grid Background="{StaticResource SystemControlBackgroundAccentBrush5}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Border Grid.Row="0"
Grid.Column="0"
Grid.RowSpan="4"
Width="90"
Height="90"
VerticalAlignment="Center"
Margin="5,5,0,5">
<Image Width="90"
Height="90"
Source="{Binding Logo}" />
</Border>
<Grid Grid.Row="0" Grid.Column="1" Margin="5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal"
Grid.Row="1" VerticalAlignment="Bottom">
<TextBlock Text="Id:" FontWeight="SemiBold" Foreground="White" VerticalAlignment="Center"/>
<TextBlock Text="{Binding Subject}" Margin="10,0,0,0" Foreground="White" VerticalAlignment="Center"/>
</StackPanel>
<Button Width="30" Height="30"
Command="{Binding AdditionalInfoCommand}"
Grid.RowSpan="4"
Grid.Column="1"
Margin="0,0,12,0">
<Button.Template>
<ControlTemplate TargetType="Button">
<Grid>
<Ellipse Stroke="{ThemeResource SystemControlBackgroundAccentBrush}"
Fill="{ThemeResource SystemControlBackgroundAccentBrush}"
StrokeThickness="2">
</Ellipse>
<Image Source="ms-appx:///Assets/Information.png" Width="30" Height="30" />
</Grid>
</ControlTemplate>
</Button.Template>
</Button>
</Grid>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
und meine Listview hat den folgenden Code:
<ListView ItemsSource="{Binding MyList}"
SelectedItem="{Binding SelectedItem, Mode=TwoWay}"
SelectionMode="Single">
<ListView.ItemTemplate>
.... as defined above
</ListView.ItemTemplate>
<interactivity:Interaction.Behaviors>
<core:EventTriggerBehavior EventName="Tapped">
<core:InvokeCommandAction Command="{Binding ItemClickCommand}"
CommandParameter="{Binding SelectedItem}" />
</core:EventTriggerBehavior>
</interactivity:Interaction.Behaviors>
</ListView>
Alle Ideen, wie ich dieses Problem lösen kann?
UPDATE 1: schwach
Ich werde meine Frage erneut Ausdruck. Es ist mir gelungen, den im ListViewItem angezeigten Button an ein bestimmtes Klickereignis zu binden, indem ich einen RelayCommand (AdditionalInfoCommand) in das ViewModel des Elements einfüge. Jetzt ist mein Hauptproblem der oben erwähnte Fehler, der nach AdditionalInfoCommand ausgelöst wird, und ich nehme an, dass es daran liegt, dass es von ItemClickCommand erfasst wird. Seltsam wie Sie vermuten würden, dass es das gleiche ViewModel verwendet.
Gibt es eine Möglichkeit, den Itemclick nicht auszulösen, wenn diese Schaltfläche angetippt wird?
Danke.
Thierry