与System.Windows.Forms.ListView比较,选择System.Windows.Controls.L

本文关键字:System Windows 选择 Controls ListView Forms 比较 | 更新日期: 2023-09-27 18:05:26

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

myListView.items[index].selected = True;

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

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

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

我如何以编程方式在我的listview上选择单个对象。

与System.Windows.Forms.ListView比较,选择System.Windows.Controls.L

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

<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]);