【问题标题】:select item in System.Windows.Controls.ListView compared to System.Windows.Forms.ListView与 System.Windows.Forms.ListView 相比,在 System.Windows.Controls.ListView 中选择项目
【发布时间】:2011-10-24 14:34:01
【问题描述】:

在 windows 窗体中,很容易从列表视图中选择一个项目:

myListView.items[index].selected = True;

在 wpf 上是不一样的。我将一个列表绑定到 myListView。因此,我无法将 someClass 对象转换为 ListViewItem 以调用 IsSelected 方法。换句话说,这是行不通的:

foreach (ListViewItem item in listView1.Items)
{
     item.IsSelected = true;
}

因为 item 不能被视为 ListViewItem。那我该如何选择项目呢?我可以通过调用 myListView.selectAll() 方法来选择所有项目。

如何以编程方式在列表视图中选择单个对象。

【问题讨论】:

    标签: c# wpf xaml listview selection


    【解决方案1】:

    在大多数情况下,您应该将选择绑定到对象上的某些属性。例如

    <ListView Name="_lv" ItemsSource="{Binding Data}">
        <ListView.ItemContainerStyle>
            <Style TargetType="{x:Type ListViewItem}">
                <Setter Property="IsSelected" Value="{Binding IsSelected}" />
            </Style>
        </ListView.ItemContainerStyle>
    </ListView>
    
    class MyClass : INotifyPropertyChanged
    {
        private bool _IsSelected = false;
        public bool IsSelected
        {
            get { return _IsSelected; }
            set
            {
                if (_IsSelected != value)
                {
                    _IsSelected = value;
                    OnPropertyChanged("IsSelected");
                }
            }
        }
    
        //...
    
        public event PropertyChangedEventHandler PropertyChanged;
        protected virtual void OnPropertyChanged(string propertyName)
        {
            if (this.PropertyChanged != null)
            {
                this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }
    

    然后在代码中设置该属性将选择项目:

    foreach (MyClass item in Data)
    {
        item.IsSelected = true;
    }
    

    您还可以操作SelectedItems 集合:

    _lv.SelectedItems.Clear();
    _lv.SelectedItems.Add(Data[4]);
    

    【讨论】:

    • 您使用什么参考来使用 PropertyChanged.Notify 方法?我正在尝试添加 System.Activities.Design.dll,但我似乎找不到它...
    • @TonoNam:这是松散类中的扩展方法,只需使用引发事件的常见 OnPropertyChanged 方法即可。
    • 非常感谢 H.B. !我正在尝试对 treeview 控件做类似的事情。我想它会是类似的吧?
    猜你喜欢
    • 1970-01-01
    • 2018-08-01
    • 2013-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多