在populate上更改ListViewItem的背景颜色

时间:2011-12-13 13:22:31

标签: c# wpf listview listviewitem

这是撕掉我的头发,

我有一个listview

<ListView Canvas.Left="1045"  Canvas.Top="667"  FontSize="25" ItemsSource="{Binding Items}"   FontFamily="Gill Sans MT" Height="173" Name="lvContact" Width="536" SelectionChanged="lvContact_SelectionChanged">

在我的代码中,我动态地将一个项目添加到列表中

public void UpdateContactList(Hashtable contactList)
{
    this.lvContact.Items.Clear();

    SortedDictionary<string,string> sortedContactList = new SortedDictionary<string,string>();


    foreach (DictionaryEntry de in contactList)
    {
        sortedContactList.Add(de.Key.ToString(), de.Value.ToString());
    }


    foreach (var de in sortedContactList)
    {
        System.Windows.Controls.ListViewItem contactItem = new System.Windows.Controls.ListViewItem();
        string contactItemString = de.Key.ToString();

        System.Windows.Controls.ListViewItem text = new System.Windows.Controls.ListViewItem();

        text.Content = contactItemString;
        if (de.Value == "NLN")
        {
            text.Background = Brushes.Green;
        }
        else
        {
            text.Background = Brushes.Gray;
        }
        lvContact.Items.Add(text);
    }
}

然而,背景颜色永远不会改变,列表也不会更新。

任何想法为什么? 非常感谢

1 个答案:

答案 0 :(得分:1)

ListView可以绑定到ItemsSource,也可以手动指定ListView.Items。你不能兼得。

您的ListView定义会绑定您的ListView.ItemsSource,因此您无法手动指定ListView.Items

由于您的ItemsSource已绑定到某个媒体资源Items,因此我认为您的List<T>ObservableCollection<T>位于名为Items的{​​{1}}项目中你的ListView。要修改ListView的项目,您应该修改此集合。

要根据值更改背景颜色,我会使用DataTrigger。这将允许您保留ItemsSource bindnig,并将您的数据与UI分开。

<Style TargetType="{x:Type ListViewItem}">
    <Setter Property="Background" Value="Gray" />
    <Style.Triggers>
        <DataTrigger Binding="{Binding Value}" Value="NLN">
            <Setter Property="Background" Value="Green" />
        </DataTriggers>
    </Style.Triggers>
</Style>