2016-11-12 5 views
0

über die Bindung Ich habe das folgende Stück CodeZugriff auf aktuelle Items Index

<ItemsControl x:Name="ItemsControl" ItemsSource="{Binding Offers}"> 
       <ItemsControl.ItemsPanel> 
        <ItemsPanelTemplate> 
         <StackPanel Orientation="Vertical"></StackPanel> 
        </ItemsPanelTemplate> 
       </ItemsControl.ItemsPanel> 
       <ItemsControl.ItemTemplate> 
        <DataTemplate> 
         <wpf:Card Padding="32" Margin="5" d:DataContext="{d:DesignData }"> 
          <StackPanel Margin="0,0,0,-30" Height="107"> 
           <TextBlock 
            Style="{DynamicResource MaterialDesignTitleTextBlock}"> 
            <Run Text="Offer " /> 

           </TextBlock> 
           <TextBlock Text="{Binding CarDescription}" /> 
           <Separator Height="1" Visibility="Hidden" /> 
          <Button Content="Select" 
             Width="72" 
             VerticalAlignment="Bottom" 
             HorizontalAlignment="Right" 
             Margin="0,20,0,0" 
             Command="{Binding SelectOfferCommand}"/> 
         </StackPanel> 
         </wpf:Card> 

        </DataTemplate> 
       </ItemsControl.ItemTemplate> 
      </ItemsControl> 

Die eine Reihe von wiederholten Boxen produziert, hat jeder einen Knopf. Jedes Mal, wenn ich auf die Schaltfläche klicke, möchte ich auf den aktuellen Box-Index (von ItemsControls ItemsSource) zugreifen und ihn als Befehlsparameter übergeben. Ist es möglich, es zu tun?

+3

Warum? Sie können das tatsächliche Element übergeben, an das die itemTemplate gebunden ist. – XAMlMAX

+0

Benennen Sie kein visuelles Objekt als Typ. Sie sollten den Namen Ihres ItemsControl in einen anderen Namen ändern, zB: "ItemsControlOffers". –

+0

@ UçanKartal Aus welchem ​​Grund? "ItemsControl" ist hier ein vollkommen gültiger Name. – Clemens

Antwort

0

Möglicherweise ist es für Sie geeignet, index Eigenschaft zu jedem Offer bei der Erstellung Offers hinzuzufügen und diesen Index OnSelectOfferCommand zu senden. Es wird viel einfacher sein

ps Ich denke, ich muss meine Antwort erklären: Meine Nachsaugung ist nicht nur einfacher in der Umsetzung, aber es ist auch eine gute Praxis, Geschäftslogik von UI zu trennen. In diesem Fall, wenn die Benutzeroberfläche geändert wird, wirken sich Änderungen nicht auf den gesamten Bestellprozess aus.

0

Ja, das ist möglich.

<Button Command="{Binding SelectOfferCommand}" 
CommandParameters="{Binding ElementName=ItemsControl,Path=SelectedIndex}" 
/> 
0

Sie können die aktuelle Index eines ItemsControl die AlterationIndex Verwendung übergeben.

See more info here

Beispiel:

<ItemsControl x:Name="ItemsControl" 
       ItemsSource="{Binding Offers}" 
       AlternationCount="1000"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <StackPanel Orientation="Vertical"></StackPanel> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <wpf:Card Padding="32" Margin="5" d:DataContext="{d:DesignData }"> 
       <StackPanel Margin="0,0,0,-30" Height="107"> 
        <TextBlock 
         Style="{DynamicResource MaterialDesignTitleTextBlock}"> 
         <Run Text="Offer " /> 

        </TextBlock> 
        <TextBlock Text="{Binding CarDescription}" /> 
        <Separator Height="1" Visibility="Hidden" /> 
       <Button Content="Select" 
         Width="72" 
         VerticalAlignment="Bottom" 
         HorizontalAlignment="Right" 
         Margin="0,20,0,0" 
         Command="{Binding SelectOfferCommand}" 
         CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ContentPresenter}}, Path=(ItemsControl.AlternationIndex)}"/> 
       </StackPanel> 
      </wpf:Card> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 
Verwandte Themen