-1

我有撤销管理器。我只需要在列表视图中查看 10 个条目。已经沸腾的大脑怎么办呢。

这段代码被添加到视图列表的所有记录中,但我只需要最后 10 条。

lvUndoStack.Items.Clear();
var list = new List<object>();
foreach (var command in UndoRedoManager.UndoCommands)
{
    list.Insert(0, command.ToString());
}
lvUndoStack.Items.AddRange(list.ToArray());
lvUndoStack.SelectedIndex = lvUndoStack.Items.Count - 1;
indexSeletedItemUndoStack = lvUndoStack.SelectedIndex;

list = new List<object>();
foreach (var command in UndoRedoManager.RedoCommands)
{
    list.Insert(0, command.ToString());
}
lvUndoStack.Items.AddRange(list.ToArray());

重要的是- 未使用 linq

更新:

例子:

undo1
undo2
undo3
undo4
undo5
undo6
undo7
redo1
redo2
redo3
redo4
redo5

我只需要 10 个。如果启动 undo4,那么您需要在最后一个或最多 10 个中显示所有内容

4

1 回答 1

0

如果我理解您的问题,您(最多)需要最后 10 个撤消和最后 10 个重做命令。获得撤消命令列表后,使用它来获取最后 10 个:

if (list.Count <= 10)
{
    lvUndoStack.Items.AddRange(list.ToArray());
}
else
{
    for (int i = 0; i < 10; i++)
    {
        lvUndoStack.Items.Add(list[0]);
    }
}

并对重做命令执行相同的操作。这不是最好的解决方案,IMO——实际上更像是一个杂牌,但它应该让你朝着正确的方向前进。

一个更好的解决方案是修改/增强 UndoRedoManager 类,以便 ListView 可以调用一个方法来获取最后n 个撤消/重做命令的列表。就像是:

public List<Object> GetUndoCommands(int numberOfCommands);

然后 ListView 可以简单地调用该方法:

lvUndoStack.Items.AddRange(UndoRedoManager.GetUndoCommands(10).ToArray());

重做命令也有类似的东西。它从您的 UI 层中删除了一堆代码,并让您可以灵活地在以后轻松切换最大项目数,而且通常(再次 IMO)似乎是一种更好的方法。

于 2011-07-09T21:58:36.440 回答