0

直到现在,我使用添加项目到我的列表视图

lstView.Items.Add(new MyData("Val", 1));

问题是我不能简单地使用 items[i].Background 更改该项目的样式(例如背景)。

我尝试让 MyData 继承 ListViewItem 但绑定不起作用。

我的绑定:

<GridViewColumn Header="my var" DisplayMemberBinding="{Binding Path=Name}" />

正如我所说的,当我将项目添加为我自己的类时,事情行有效,但当我的类继承 listviewitem 时却不行。我还尝试使用我的班级的 DataContext 添加一个 listviewitem ,但没有成功。

任何人都知道如何解决这个问题?

4

2 回答 2

2

WPF 具有数据模板的概念,可将可视化与基础数据分开。ItemTemplateListView(与任何其他 ItemsControl 一样)通过属性为其项目提供数据模板。您可以在样式化和模板化 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 中,您可以指定CellTemplateGridViewColumn 而不是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>

现在您可以像这样简单地将 DataItems 添加到 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,您不会直接将项目添加到ItemsListView 的集合中,而是将ItemsSource属性绑定到 type 的属性ObservableCollection<DataItem>

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

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

于 2013-03-17T17:45:15.640 回答
0

您可以使用数据绑定,并且对于每个项目,将 BackColor 等属性关联到项目,将项目绑定(到 ObservableCollection),如果要更改颜色,只需调用 item.BackColor=...,这样就可以了!

于 2013-03-17T14:15:09.600 回答