如何阻止Scroll更改事件触发数据绑定(WPF)

时间:2016-04-08 10:33:49

标签: c# wpf mvvm scrollviewer

                                     

                </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)
        {

        }
    }
  

当发生数据绑定时,会触发滚动更改事件。如何检查这是来自数据绑定的触发器,什么也不做,以及何时手动触发

1 个答案:

答案 0 :(得分:0)

更新绑定时,它是滚动查看器的ItemsSource吗?

可能是绑定是添加或删除某些内容,导致滚动查看器更改其内容的大小。看看the scroll changed event args,有很多条件可以触发此事件。

您可能只想查看以下事件属性:

VerticalChange - 获取一个值,该值指示ScrollViewer的垂直偏移量的变化。

因此,请尝试仅在VerticalChange!= 0时执行操作。或者将调试器放在那里,看看是否有任何特定的事件类型要忽略,只有在绑定更改时才会发生,例如:

ExtentHeightChange - 获取一个值,该值指示ScrollViewerextent的高度变化。

当绑定更新时,可能只有非零,使滚动条更大(但不会更改滚动位置)。

这样的事情:

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

        }
    }
}

希望有所帮助。