【问题标题】:Unselect ListView-items that are not in the field-of-view取消选择不在视野范围内的 ListView 项目
【发布时间】:2012-03-28 19:40:18
【问题描述】:

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

示例: 我的 ListView 中有六个项目。只有(前)五个是可见的。 我选择第一项。当我向下滚动时,该项目不再可见,但仍处于选中状态。

我想取消选择超出当前视图的任何项目。

【问题讨论】:

  • 什么是商业目的?为什么用户想要一个项目被取消选择只是因为它不在视野范围内。我认为您需要实现自己的滚动才能知道视图中的项目。
  • 这是一个有效的问题。我(ab)使用 ListView 来实现它的功能。这不是最终用户与之交互的控件。
  • 好的,但我更困惑。问题陈述就像您使用 ListView 作为 UI 控件一样。
  • 您可能可以使用 VirtualMode true 并处理 RetrieveVirtualItem 但问题是调用可能发生在未显示的项目上,因为我认为它缓存了一些。 msdn.microsoft.com/en-us/library/…
  • 我正在使用 ListView,但仅与另一个自定义控件协作,该控件响应任何选定的项目。因此,选择您看不到的项目是没有意义的。我已经编写了自己的逻辑来跟踪视图中的项目,并取消选择掉出的项目。顺便说一句,您提到的链接是针对 WinForms 的。不过还是谢谢你,感谢你的努力!

标签: wpf listview


【解决方案1】:

我手动解决了它,所以它更像是一种解决方法。 我只是跟踪索引...

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--;
}
}

【讨论】:

    猜你喜欢
    • 2011-02-18
    • 1970-01-01
    • 1970-01-01
    • 2015-10-19
    • 2011-03-10
    • 1970-01-01
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多