2016-04-15 13 views
1

Ich habe eine Listview wie folgt aus:Wie klicken Sie auf eine Schaltfläche in ListView Element?

<Grid x:Key="Thumbnail" Width="{Binding ActualWidth, ElementName=DummyRectangle}" Height="{Binding ActualHeight, ElementName=DummyRectangle}" HorizontalAlignment="Center" VerticalAlignment="Top" Background="Transparent" > 

    <Grid.RowDefinitions> 
     <RowDefinition Height="1*" /> 
     <RowDefinition Height="1*" /> 
     <RowDefinition Height="1*" /> 
     <RowDefinition Height="1*" /> 
     <RowDefinition Height="1*" /> 
     <RowDefinition Height="1*" /> 
     <RowDefinition Height="1*" /> 
    </Grid.RowDefinitions> 

    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="1*" /> 
     <ColumnDefinition Width="1*" /> 
     <ColumnDefinition Width="1*" /> 
     <ColumnDefinition Width="1*" /> 
     <ColumnDefinition Width="1*" /> 
     <ColumnDefinition Width="1*" /> 
     <ColumnDefinition Width="1*" /> 
     <ColumnDefinition Width="1*" /> 
     <ColumnDefinition Width="1*" /> 
     <ColumnDefinition Width="1*" /> 
     <ColumnDefinition Width="1*" /> 
     <ColumnDefinition Width="1*" /> 
     <ColumnDefinition Width="1*" /> 
     <ColumnDefinition Width="1*" /> 
    </Grid.ColumnDefinitions> 

    <Image Name="thumbImage" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="14" Grid.RowSpan="7" Stretch="UniformToFill" Source="/MS_Show_Assets/ImportAssets/Test.jpg"></Image> 

    <StackPanel Name="Overlay" Grid.Row="0" Grid.Column="10" Grid.ColumnSpan="4" Grid.RowSpan="7" Background="LightBlue" Opacity="0.4"/> 


    <Button Name="slide_ON_OFF" Grid.Row="0" Grid.Column="10" Grid.ColumnSpan="4" Grid.RowSpan="4" VerticalAlignment="Center" Background="Transparent" Command="{Binding SlideOnOffCommand}"> 
     <Button.Template> 
      <ControlTemplate> 
       <Grid RenderTransformOrigin="0.5,0.5" x:Name="bg"> 
        <Image Source="/MS_Show_Assets/ImportAssets/Visible_ON.png"/> 
       </Grid> 
      </ControlTemplate> 
     </Button.Template> 

    </Button> 

    <Button Name="fadein_ON_OFF" Grid.Row="3" Grid.Column="10" Grid.ColumnSpan="4" Grid.RowSpan="4" VerticalAlignment="Center" Background="Transparent"> 
    <Button.Template> 
     <ControlTemplate> 
      <Grid RenderTransformOrigin="0.5,0.5" x:Name="bg"> 
       <Image x:Name ="main_image" Source="/MS_Show_Assets/ImportAssets/Bulletpoint_ON.png"/> 
      </Grid> 
     </ControlTemplate> 
    </Button.Template> 
</Button> 

und das Ansichtsmodell:

public CompositeCommand SlideOnOffCommand { get; set; } 

SlideOnOffCommand = new CompositeCommand(); 
SlideOnOffCommand.RegisterCommand(new DelegateCommand(SlideOnOff)); 

private void SlideOnOff() 
     { 

     } 

Als

<ListView x:Name="Thumbnails" HorizontalContentAlignment ="Left" VerticalContentAlignment="Top" Padding="0" Background ="#81AFD3" Grid.Row="6" Grid.Column="6" Grid.ColumnSpan="10" Grid.RowSpan="27" ScrollViewer.VerticalScrollBarVisibility="Visible" ItemsSource="{Binding NumberOfSlides}" SelectedItem="{Binding SelectedItem}"> 
    <i:Interaction.Triggers> 
     <i:EventTrigger EventName="SelectionChanged"> 
      <i:InvokeCommandAction Command="{Binding ThumbnailsSelectionChangedCommand}" CommandParameter="{Binding Thumbnails.SelectedIndex, Mode=OneWayToSource}"/> 
     </i:EventTrigger> 
    </i:Interaction.Triggers> 


    <ListView.ItemContainerStyle> 
     <Style TargetType="{x:Type ListViewItem}"> 
      <Setter Property="Content" Value="{StaticResource Thumbnail}" /> 
      <Setter Property="Margin" Value="{Binding ActualWidth, ElementName=DummyRectangle2}"/> 
      <Style.Triggers> 
       <Trigger Property="IsMouseOver" Value="True"> 
        <Setter Property="IsSelected" Value="True"/> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </ListView.ItemContainerStyle> 

    <ListView.Resources> 
     <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" 
     Color="Blue"/> 
    </ListView.Resources> 
</ListView> 

und das Element für die Liste wie folgt definiert ist Sie können sehen, das Listenelement enthält einige Schaltflächen. Ich hakte einen von ihnen an einen Befehl in ViewModel, aber wenn Sie darauf klicken, wird die abonnierte Methode nicht aufgerufen. Wie können diese Schaltflächen klickbar gemacht werden?

+0

auch zeigen Sie Ihre relevanten ViewModel Teil. – AnjumSKhan

Antwort

1

Sie müssen eine RelativeSource an Ihrer Befehls-Bindung des Button-Command bereitstellen.

Ihr Befehl als sollte etwas wie folgt aussehen:

Command="{Binding DataContext.ThumbnailsSelectionChangedCommand, RelativeSource={RelativeSource FindAncestor, AncestorType=Window} }" 

Wenn die Wurzel-Element Ihrer XAML ein Usercontrol ist und kein Fenster als die Bindung sollte wie folgt aussehen:

Command="{Binding DataContext.ThumbnailsSelectionChangedCommand, RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl} }" 
+0

Siehe meinen aktualisierten Code für den VIewModel-Abschnitt. Wie binde ich die Schaltfläche an diesen Befehl? – Ivan

0

Diese gelöst mein Problem:

<Button Name="slide_ON_OFF" Grid.Row="0" Grid.Column="10" Grid.ColumnSpan="4" Grid.RowSpan="4" VerticalAlignment="Center" Background="Transparent" Command="{Binding DataContext.SlideOnOffCommand, RelativeSource={RelativeSource FindAncestor, AncestorType=ListView}}"/> 
Verwandte Themen