2016-04-08 7 views
2

Wie Blättern Sie zu stoppen geändert Ereignis von Triggern auf Datenbindung (WPF)

   </ItemsControl.ItemTemplate> 
       <ItemsControl.GroupStyle> 
        <GroupStyle> 
         <GroupStyle.ContainerStyle> 
          <Style TargetType="GroupItem"> 
           <Setter Property="Template"> 
            <Setter.Value> 
             <ControlTemplate TargetType="GroupItem"> 
              <Grid> 
               <Grid.RowDefinitions> 
                <RowDefinition/> 
                <RowDefinition/> 
               </Grid.RowDefinitions> 
               <TextBlock Grid.Row="0" HorizontalAlignment="Center" FontWeight="Bold" Foreground="{StaticResource Accent}" Text="{Binding Path=Name , StringFormat={}{0:D}}" /> 
               <ItemsPresenter Grid.Row="1"/> 
              </Grid> 
             </ControlTemplate> 
            </Setter.Value> 
           </Setter> 
          </Style> 
         </GroupStyle.ContainerStyle> 
        </GroupStyle> 
       </ItemsControl.GroupStyle> 
      </ItemsControl> 
      <Interactivity:Interaction.Triggers> 
       <Interactivity:EventTrigger EventName="ScrollChanged" > 
        <Presentation:InvokeDelegateCommandAction Command="{Binding ChatScrollViewer_OnViewChange}" CommandParameter="{Binding RelativeSource={RelativeSource Self}, Path=InvokeParameter}" /> 
       </Interactivity:EventTrigger> 
      </Interactivity:Interaction.Triggers> 
     </ScrollViewer> 



private void ChatScrollViewer_OnViewChangeEvent(ScrollChangedEventArgs Event) 
    { 
     ScrollViewer scrollViewer = Event.OriginalSource as ScrollViewer; 
     if (scrollViewer.VerticalOffset == 0) 
     { 

     } 
    } 

Wenn Daten erfolgen blättern geändert Ereignisbindung ausgelöst. Wie überprüfen Sie, dass dies ein Auslöser von Daten ist verbindlich und und nichts tun, wenn etwas manuell ausgelöst

+0

'Event.Handled = true; return; 'in Ihrer if-Klausel – Nebelkraehe

+0

Können Sie bitte weitere Details hinzufügen –

+0

Wenn ich Ihre Frage richtig verstehe, möchten Sie die Ausführung von Logik stoppen, wenn es keine Scroll-Aktion war. Ihre Wenn-Klausel fragt, ob kein vertikaler Versatz vorhanden ist. Wenn ja, können Sie 'Event.Handled = true; return; 'wodurch das Ereignis beendet und die Methode beendet wird. – Nebelkraehe

Antwort

0

Wenn die Bindung aktualisiert wird, ist es die Itemssource des Scroll-Viewer?

Wahrscheinlichkeiten sind, dass die Bindung etwas hinzufügt oder entfernt, was dazu führt, dass der Scroll-Viewer die Größe seines Inhalts ändert. Schauen Sie sich the scroll changed event args an, es gibt viele Bedingungen, die dieses Ereignis auslösen.

Sie wollen wahrscheinlich nur wie die Ereigniseigenschaften überprüfen:

VerticalChange - Ruft einen Wert, der die Veränderung der vertikalen eines Scroll Offset angibt.

Also nur versuchen, die Aktion durchzuführen, wenn VerticalChange = 0 oder einen Debugger in dort ab und sehen, ob es irgendwelche spezifischen Ereignistypen ist nur ignorieren möchten, dass passieren, wenn Änderungen zu binden, zum Beispiel:

ExtentHeightChange - Ruft einen Wert ab, der die Änderung der Höhe des ScrollViewerextent angibt.

Kann nur Null sein, wenn die Bindung aktualisiert wurde, wodurch die Bildlaufleiste größer wird (aber die Bildlaufposition nicht geändert wird).

So etwas wie folgt aus:

private void ChatScrollViewer_OnViewChangeEvent(ScrollChangedEventArgs Event) 
{ 
    if (Event.VerticalChange != 0) 
    { 
     ScrollViewer scrollViewer = Event.OriginalSource as ScrollViewer; 
     if (scrollViewer.VerticalOffset == 0) 
     { 

     } 
    } 
} 

Hoffnung, das hilft.

+0

Danke Joe .You Antwort war großartig. Es hat das Problem gelöst –

Verwandte Themen