如何让我的ListView专注于特定项目?

时间:2013-06-12 14:38:12

标签: c# wpf listview gridview collections

我似乎无法弄明白,因为我似乎无法将ListView的项目转换为ListViewItem类型并调用ListViewItem.Focus()。以下操作无效,因为ListView的项目类型为LogRecord:

((ListViewItem)listView.Items[0]).Focus();

编辑:我希望滚动条移动到项目的位置,基本上或更好地说,该项目在用户看到的项目列表中变得可见。

关于如何让我的ListView专注于特定项目的任何想法?现在它绑定到一个集合。以下是我设置ListView对象的方法:

listView = new ListView();
Grid.SetRow(listView, 1);
grid.Children.Add(listView);
GridView myGridView = new GridView();
// Skipping some code here to set up the GridView columns and such.
listView.View = myGridView;
Binding myBinding = new Binding();
myBinding.Source = PaneDataContext.LogsWrapper;
listView.SetBinding(ItemsControl.ItemsSourceProperty, myBinding);

我绑定到这个数据类型(LogRecord包含像LogRecord.Message这样的东西,对应于网格视图上的Message列等等;代码可以工作):

        public class LogRecordWrapper : IEnumerable<LogRecord>, INotifyCollectionChanged
        {
            public List<LogRecord> RowList { get; set; }

            public event NotifyCollectionChangedEventHandler CollectionChanged;

            public LogRecordWrapper()
            {
                RowList = new List<LogRecord>();
            }

            protected virtual void OnCollectionChanged(NotifyCollectionChangedEventArgs e)
            {
                if (CollectionChanged != null)
                {
                    CollectionChanged(this, e);
                }
            }

            public void SignalReset()
            {
                OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset, null));
            }

            public void Add(LogRecord item)
            {
                RowList.Add(item);
                OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, item));
            }

            public IEnumerator<LogRecord> GetEnumerator()
            {
                return RowList.GetEnumerator();
            }

            System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
            {
                return GetEnumerator();
            }
        }

3 个答案:

答案 0 :(得分:1)

ListView.ScrollIntoView

ListBox.ScrollIntoView Method

链接显示ListBox但它也适用于ListView

至于不使用Focus,请发布您使用ScrollIntoView的方式。

答案 1 :(得分:0)

你可以使用:

listView.Items[0].Focused = true;

...或者也许:

listVIew.Items[0].Selected = true;

(我不是肯定你在追求什么样的“焦点”)

然后与(或使用到位)结合:

listView.Items[0].EnsureVisible();

答案 2 :(得分:0)

这太棒了!!!! 05-29-2002,04:53 PM#1 Jim Guest ListView EnsureVisible不起作用。有任何想法吗?  代码...实际上找到并突出显示所选项目,它只是不滚动  它,使它可见。用户被迫滚动到该项目。

04-04-2004,上午12:07 luchmun 嗨, 在表单上工作......一切都很顺利,但问题是即使我使用liteitem.ensurevisible和listitem.selected = true,当前条目也不会显示。

11年后,它仍然不起作用,没有人,甚至微软似乎都不知道为什么? 对我有用的答案是listview1.ensurevisible(itemindex)NOT listview.items(itemindex).ensurevisible