2016-04-08 5 views
2

は(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) 
     { 

     } 
    } 

をイベントを変更しました。これがデータバインディングからのトリガーであることを確認し、何もしないで手動でトリガーされたとき何かを行う方法

+0

'Event.Handled = true; return; 'if節の内部 – Nebelkraehe

+0

詳細を追加できますか –

+0

私はあなたの質問を正しく理解すれば、スクロールアクションがなければロジックの実行を停止したいと考えています。 if節は、垂直オフセットがないかどうかを尋ねます。もしそうなら、あなたは 'Event.Handled = true; return; 'これはイベントを停止し、メソッドを終了します。 – Nebelkraehe

答えて

0

スクロールビューアのItemsSourceですか?

バインディングは何かを追加または削除する可能性があり、その結果、スクロールビューアはコンテンツのサイズを変更します。 the scroll changed event argsを見てください。このイベントを発生させる条件はたくさんあります。

あなたはおそらく唯一のようなイベントのプロパティを確認したい:

VerticalChangeは - ScrollViewerのの垂直オフセットの変化を示す値を取得します。

だから、ときVerticalChange = 0の唯一のあなたのアクションを実行してみてくださいまたは、そこにデバッガをドロップすると、あなただけ例えば、結合の変化が起こることを無視したい任意の特定のイベントタイプがあります場合は以下を参照してください!

ExtentHeightChange - ScrollViewerextentの高さの変化を示す値を取得します。

バインディングが更新されたときにスクロールバーを大きくする(スクロール位置を変更しない)場合のみ0になることがあります。

したがって、このような何か:

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

     } 
    } 
} 

お役に立てば幸いです。

+0

ありがとうジョー。それは問題を解決した –

関連する問題