2012-03-28 189 views
0

在ListView中,我希望所选项目始终可见(在当前视野中)。取消选择不在视野中的ListView项目

例如: 我在我的ListView中有六个项目。只有(顶部)五个可见。 我选择第一个项目。当我向下滚动时,此项目不再可见,但仍保持选中状态。

我想要DEselect从任何当前视图中删除的项目。

+1

什么是商业目的?为什么用户希望某个项目因为它不在视图中而未被选中?我认为你需要实现自己的滚动来了解哪些项目在视图中。 – Paparazzi 2012-03-28 19:51:44

+0

这是一个有效的问题。我(ab)使用ListView的功能。这不是最终用户与之交互的控制。 – Jowen 2012-03-31 20:05:27

+0

好的,但我更加困惑。问题陈述读起来就像您使用ListView作为UI控件一样。 – Paparazzi 2012-04-01 15:45:26

回答

0

我手动解决它,所以它更多的是一种解决方法。 我只是跟踪指数...

public class ScrollIndexManager 
{ 
private readonly int _viewableItemsCount; 
private int _canScrollUpCount; 
private int _canScrollDownCount; 

public ScrollIndexManager(int viewableItemsCount) 
{ 
    _viewableItemsCount = viewableItemsCount; 
} 

public bool HasChanged { get; set; } 

public int BottomVisibleItemIndex 
{ 
    get { return TopVisibleItemIndex + _viewableItemsCount - 1; } 
} 

private int _topVisibleItemIndex = 0; 
public int TopVisibleItemIndex 
{ 
    get { return _topVisibleItemIndex; } 
    set 
    { 
     if (value < 0) 
     { 
      HasChanged = false; 
      return; 
     } 
     _topVisibleItemIndex = value; 

     HasChanged = true; 
    } 
} 

public void SetCanScrollDown(int totalItemCount) 
{ 
    _canScrollDownCount = totalItemCount - _viewableItemsCount; 
} 

public bool CanScrollUp() 
{ 
    return _canScrollUpCount > 0; 
} 

public bool CanScrollDown() 
{ 
    return _canScrollDownCount > 0; 
} 

public bool Increase() 
{ 
    TopVisibleItemIndex--; 
    return HasChanged; 
} 

public bool Decrease() 
{ 
    TopVisibleItemIndex++; 
    return HasChanged; 
} 

public void ScrolledUp() 
{ 
    _canScrollUpCount--; 
    _canScrollDownCount++; 
} 

public void ScrolledDown() 
{ 
    _canScrollUpCount++; 
    _canScrollDownCount--; 
} 
}