Laden...

Button Command Binding in ScrollViewer wird nicht ausgeführt

Erstellt von bobynator93 vor 3 Jahren Letzter Beitrag vor 3 Jahren 851 Views
B
bobynator93 Themenstarter:in
4 Beiträge seit 2020
vor 3 Jahren
Button Command Binding in ScrollViewer wird nicht ausgeführt

Hallo,
ich verwende MVVMLight und möchte eine Art Gallerie erstellen. Ein Scrollviewer in dem die Bilder dargestellt werden.
Die Bilder werden in Form eines Buttons dargestellt. Wenn auf ein Bild geklickt wird, soll Code ausgeführt werden. Nur funktioniert das ganze nicht innerhalb des Scrollviewers. Der "HomeCommand" wird nicht ausgelöst.
Kann mir jemand hier weiterhelfen?
Danke

XAML


        <ScrollViewer Style="{StaticResource ScrollViewerStyle}" x:Name="ScrollViewer" Grid.Row="1">
            <ItemsControl x:Name="itemsControl" ItemsSource="{Binding Images}" >
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <Button Command="{Binding HomeCommand}">
                            <Image Source="{Binding ImageUri}" Height="{Binding ActualHeight, ElementName=ScrollViewer, Mode=OneWay}" />
                        </Button>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
                <ItemsControl.ItemsPanel>
                    <ItemsPanelTemplate>
                        <WrapPanel/>
                    </ItemsPanelTemplate>
                </ItemsControl.ItemsPanel>
            </ItemsControl>
        </ScrollViewer>

ViewModel

        private RelayCommand _homeCommand;        
        public RelayCommand HomeCommand
        {
            get
            {
                return _homeCommand
                       ?? (_homeCommand = new RelayCommand(
                           () =>
                           {
                               _navigationService.NavigateTo("Home");
                           }));
            }
        }
W
955 Beiträge seit 2010
vor 3 Jahren

Das hat mit dem ScrollViewer nichts zu tun sondern mit dem ItemsControl. Der sucht den HomeCommand in den Elementen der Menge die an das ItemsControl gebunden sind. Such mal nach RelativeSource beim Binding.

5.658 Beiträge seit 2006
vor 3 Jahren

Ein Beispiel dafür gibt es in [Artikel] MVVM und DataBinding im Abschnitt "Commands".

Das Debuggen von Bindings ist dort auch im Abschnitt "Debugging" beschrieben.

Weeks of programming can save you hours of planning

B
bobynator93 Themenstarter:in
4 Beiträge seit 2020
vor 3 Jahren
                
<Button Command="{Binding DataContext.HomeCommand, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}">
     <Image Source="{Binding ImageUri}" Height="{Binding ActualHeight, ElementName=ScrollViewer, Mode=OneWay}" />
</Button>

Ich habs jetzt mal so probiert aber es löst einfach nicht aus..

5.658 Beiträge seit 2006
vor 3 Jahren

Gibt es eine Fehlermeldung im Ausgabefenster?

Weeks of programming can save you hours of planning

B
bobynator93 Themenstarter:in
4 Beiträge seit 2020
vor 3 Jahren

Nein im Ausgabefenster wird kein Fehler ausgegeben.

W
955 Beiträge seit 2010
vor 3 Jahren

Naja, vllt hast du nur den ersten von mehreren Fehlern gelöst. Wird denn der Code im RelayCommand ausgeführt? Hast du da mal ein Breakpoint gesetzt? Was passiert wenn du den Command von woanders her aufrufst?

B
bobynator93 Themenstarter:in
4 Beiträge seit 2020
vor 3 Jahren

Wenn ich den Command außerhalb des Scrollviewers über einen normalen Button aufrufe geht es ohne Probleme.

Mir fällt aber gerade auf, wenn die View geladen wird, dann springt er für jeden Button im ItemControl in den Command aber den darin enthaltenen Code führt er nicht aus..
Und beim klicken auf die Buttons im ItemControl passiert weiterhin nichts.

W
955 Beiträge seit 2010
vor 3 Jahren

FindAncestor-Type fehlt, Beispiel:


 Command="{Binding DataContext.OpenCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"