在列表视图中添加一个ListViewItem(不是我创建的类)

本文关键字:创建 ListViewItem 一个 添加 列表 视图 | 更新日期: 2023-09-27 18:04:25

到目前为止,我使用

将项目添加到listview中
lstView.Items.Add(new MyData("Val", 1));

问题是我不能简单地用items[I]. background .

改变项目的样式(比如背景)。

我尝试让MyData继承ListViewItem,但绑定不工作。

我的绑定:

<GridViewColumn Header="my var" DisplayMemberBinding="{Binding Path=Name}" />
当我将项目添加为我自己的类时,

可以工作,但当我的类继承listviewitem时则不行。我还尝试添加一个listviewitem与我的类的DataContext没有运气。

有人知道如何解决这个问题吗?

在列表视图中添加一个ListViewItem(不是我创建的类)

WPF具有数据模板的概念,可以将可视化与底层数据分离。ListView(和其他ItemsControl一样)通过ItemTemplate属性为它的项提供数据模板。你可以在ItemsControl的样式化和模板化中了解到。

给定这个简单的DataItem类

public class DataItem
{
    public string ItemText { get; set; }
    public Brush ItemBackground { get; set; }
}
一个非常简单的DataTemplate可以只包含一个Border和一个TextBlock控件:
<ListView Name="listView">
    <ListView.ItemTemplate>
        <DataTemplate>
            <Border Background="{Binding ItemBackground}">
                <TextBlock Margin="4" Text="{Binding ItemText}"/>
            </Border>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

在具有GridView的ListView中,您将指定GridViewColumn的CellTemplate而不是ItemTemplate:

<ListView Name="listView">
    <ListView.View>
        <GridView>
            <GridViewColumn>
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <Border Background="{Binding ItemBackground}">
                            <TextBlock Margin="4" Text="{Binding ItemText}"/>
                        </Border>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
        </GridView>
    </ListView.View>
</ListView>

现在你可以简单地添加数据项到ListView,像这样:

listView.Items.Add(new DataItem { ItemText = "Item 1", ItemBackground = Brushes.AliceBlue });
listView.Items.Add(new DataItem { ItemText = "Item 2", ItemBackground = Brushes.LemonChiffon });
listView.Items.Add(new DataItem { ItemText = "Item 3", ItemBackground = Brushes.LightCoral });

为了使UI对DataItem对象的更改作出反应,DataItem类必须实现INotifyPropertyChanged。

public class DataItem : INotifyPropertyChanged
{
    ...
}

为了更好地分离数据和UI,您不会直接将项目添加到ListView的Items集合中,而是将ItemsSource属性绑定到ObservableCollection<DataItem>类型的属性:

<ListView ItemsSource="{Binding DataItems}">
    ...
</ListView>

您可以在数据绑定概述/绑定到集合中阅读更多关于此主题的内容。

你可以使用数据绑定,对于每个项目,关联一个属性,如BackColor项目,绑定项目(到ObservableCollection),如果你想改变颜色,简单调用item.BackColor=…这就行了!