コード例 #1
0
        /// <summary>
        /// ListView가 Scroll이 될 때의 동작 정의
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void _scrollViewer_ViewChanged(object sender, ScrollViewerViewChangedEventArgs e)
        {
            var nowScrollViewer  = sender as ScrollViewer;
            var scrollableHeight = nowScrollViewer.ScrollableHeight;
            var verticalOffset   = nowScrollViewer.VerticalOffset;

            if (scrollableHeight == 0)
            {
                return;
            }

            int scope       = 50;
            var topScope    = scope;                    // 이전의 자료를 가져오기 위한 범위
            var bottomScope = scrollableHeight - scope; // 이후의 자료를 가져오기 위한 범위

            // 해당 범위 안에 들어갔을 경우 데이터를 가져온다. 현재는 무제한으로.
            if (verticalOffset < topScope && !IsTopScrolled)
            {
                if (IsUnlimitedData)
                {
                    var newDateGroup = DateCollection.GetMoreItems(0, 10, DateTests, nextDirection: false);
                    DateTests.Insert(0, newDateGroup);
                    IsTopScrolled = true;
                }
            }
            else if (verticalOffset > bottomScope && !IsBottomScrolled)
            {
                if (IsUnlimitedData)
                {
                    var newDateGroup = DateCollection.GetMoreItems(DateTests.Count - 1, 10, DateTests, nextDirection: true);
                    DateTests.Add(newDateGroup);
                    IsBottomScrolled = true;
                }
            }

            // 맨 위로 가거나 맨 아래로 가면 다시 자료를 가져오게 만들어야 함
            if (verticalOffset < topScope && IsTopScrolled)
            {
                IsTopScrolled = false;
            }
            else if (verticalOffset > bottomScope && IsBottomScrolled)
            {
                IsBottomScrolled = false;
            }
        }
コード例 #2
0
        /// <summary>
        /// 현재 Render 되어 있는 ListViewItem을 별도의 ListView에 표기
        /// </summary>
        /// <param name="isRecycle"></param>
        /// <param name="dateTest"></param>
        public void CheckRecycleRenderedList(bool isRecycle, DateItem dateTest, ListViewItem nowItem)
        {
            if (isRecycle)      // 다시 가상화 되는 상태
            {
                NowRenderedList.Remove(dateTest);
            }
            else
            {
                NowRenderedList.Add(dateTest);
            }

            NowCount.Text = "Now rendered items count : " + NowRenderedList.Count.ToString();

            // PointerWheelChagnedEvent 가 발생하지 않으므로 Container에서 검색해서 Index가 ItemSource의 Count와 같으면 맨 끝으로 간주
            var renderedLastItem = NowRenderedList.OrderBy(x => x.Name).LastOrDefault();
            var endItem          = DateTests.LastOrDefault().LastOrDefault() as DateItem;

            if (renderedLastItem == endItem)
            {
                //AddNewData();
            }
        }